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.