Forum Italiano sui Prodotti NI

annulla
Visualizzazione dei risultati per 
Cerca invece 
Intendevi dire: 

imaqStraightEdge

Salve, stò realizzando un'applicazione in LabWindowsCVI 8.5 che utilizza la libreria di visione (versione 8.5). Stò utilizzando la funzione imaqStraightEdge per estrarre un fronte su di un'area rettangolare. La funzione funziona regolarmente ma ho notato un continuo aumento della memoria utilizzata dall'applicazione ogni volta che viene usata la funzione. La chiamata alla funzione è la seguente (creata in automatico utilizzando il VisionAssistant 8.5):
 
static int IVA_FindStraightEdge2(Image* image, ROI* roi,
                                          int searchDirection,
                                          int pPolarity,
                                          int pKernelSize, int pWidth, float pMinThreshold,
                                          int interpolation,
                                          int pColumnProcessingMode,
                                          unsigned int pNumLines,
                                          int pSearchMode,
                                          double pMinScore, double pMaxScore, double pOrientation,
                                          double pAngleRange, double pAngleTolerance, unsigned int pStepSize,
                                          double minSNR, double pMinCoverage, unsigned int pHoughIterations,
                                          IVA_Data* ivaData)
{
    int success = 1;
    EdgeOptions2 edgeOptions;
    StraightEdgeOptions straightEdgeOptions;
    StraightEdgeReport2* straightEdgeReport = NULL;
    int i;

    //-------------------------------------------------------------------//
    //                    Advanced Find Straight Edge                    //
    //-------------------------------------------------------------------//
    edgeOptions.polarity = pPolarity;
    edgeOptions.kernelSize = pKernelSize;
    edgeOptions.width = pWidth;
    edgeOptions.minThreshold = pMinThreshold;
    edgeOptions.interpolationType = interpolation;
    edgeOptions.columnProcessingMode = pColumnProcessingMode;
    straightEdgeOptions.numLines = pNumLines;
    straightEdgeOptions.searchMode = pSearchMode;
    straightEdgeOptions.minScore = pMinScore;
    straightEdgeOptions.maxScore = pMaxScore;
    straightEdgeOptions.orientation = pOrientation;
    straightEdgeOptions.angleRange = pAngleRange;
    straightEdgeOptions.angleTolerance = pAngleTolerance;
    straightEdgeOptions.stepSize = pStepSize;
    straightEdgeOptions.minSignalToNoiseRatio = minSNR;
    straightEdgeOptions.minCoverage = pMinCoverage;
    straightEdgeOptions.houghIterations = pHoughIterations;
    // Locates the straight edge(s) in the ROI
    straightEdgeReport = imaqStraightEdge(image, roi, searchDirection, &edgeOptions, &straightEdgeOptions);
    // Log the results in the points array for future caliper operations.
    for (i = 0 ; i < straightEdgeReport->numStraightEdges ; i++)
    {
        IVA_AddPoint(ivaData, straightEdgeReport->straightEdges[i].straightEdgeCoordinates.start);
        IVA_AddPoint(ivaData, straightEdgeReport->straightEdges[i].straightEdgeCoordinates.end);
    }
Error:
  
    // Disposes the edge report
    imaqDispose(straightEdgeReport);
    return success;
}
 
 
Come posso evitare il continuo allocarsi di memoria?
 
Grazie.
0 Kudos
Messaggio 1 di 2
3.373Visualizzazioni

Ciao Gualty,

dal codice che hai allegato non sembra ci siano punti che causino leakage di memoria. Hai provato ad analizzare la parte restante del codice, soprattutto la parte che riguarda la  creazione ed il dispose dell'immagine (ovvero il parametro Image* passato alla funzione).

Se anche verificando la corretta allocazione/deallocazione dell'immagine il problema rimane, riesci a mandarmi un semplice esempio, contenente solo la chiamata a questa funzione ed eventualmente la parte di allocazione/deallocazione dello spazio in memoria per l'immagine.

Cordiali saluti,

Fabio M.
NI
Principal Engineer
0 Kudos
Messaggio 2 di 2
3.355Visualizzazioni