OpenCV对象检测内存问题

时间:2017-03-14 05:16:57

标签: c opencv memory-management

我在下面写的代码是使用大小不变模板匹配的异议检测。以下网站详细介绍了此技术:https://www.google.com/url?hl=en&q=http://www.pyimagesearch.com/2015/01/26/multi-scale-template-matching-using-python-opencv/&source=gmail&ust=1489552541603000&usg=AFQjCNHSfgL_RTy-o5SMyCmWELFbsfOOTw

该功能正常。但是,当我在while循环中运行太多迭代时,OpenCV错误:内存不足。 我似乎无法弄清楚为什么我遇到这个错误,因为我发布了我在每次迭代中在cvCreateMat中创建的矩阵数据。在运行循环多次并在函数cvMatchTemplate中发生内存错误。我错过了另一个错误来源吗?我在LCDK上用C语言编写这段代码。

功能:

double minVal = 0.0;
double maxVal = 0.0 ;
CvPoint minLoc;
CvPoint maxLoc;

double ratio = 1.0;

CvMat* mask2 = NULL;

//for containing the maximum values

CvMat* resized_source;
CvMat* result; //result stored for every shapes

while (1){
    // All templates are sized around the same
    if(width_curr <= template->cols || height_curr <= template->rows)
        break;

    resized_source = cvCreateMat(height_curr,width_curr,CV_8UC1);
    cvResize(source_close_edge_dist_8,resized_source,CV_INTER_LINEAR);

    result = cvCreateMat((resized_source->rows)-(template->rows)+1, (resized_source->cols)-(template->cols)+1, CV_32FC1);

    cvMatchTemplate(resized_source, template, result, CV_TM_CCOEFF);

    //Detecting several objects
    cvMinMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, mask2);

    *(max_all+*size) = maxVal;
    (max_all_point+*size)->x = maxLoc.x;
    (max_all_point+*size)->y = maxLoc.y;
    *(max_all_ratio+*size) = sqrt(ratio);
    *size = *size + 1;

    // move on to next resizing
    ratio -= 0.04;
    width_curr = sqrt(ratio)*width;
    height_curr = sqrt(ratio)*height;
    minVal = 0.0;
    maxVal =0.0 ;

    cvReleaseData(resized_source);
    cvReleaseMat(&resized_source);
    cvReleaseData(result);
    cvReleaseMat(&result);
}

0 个答案:

没有答案