Mat :: push_back导致OpenCV中的内存泄漏

时间:2015-02-13 14:04:59

标签: c++ opencv memory

我尝试提取大约8000张图片的SIFT功能,并将它们放入一个Mat

以下是我的代码:

Mat feature, im, SIFTFeatures;
char imgFile[50];
SiftFeatureDetector detector;
SiftDescriptorExtractor extractor;

for (int view = 0; view < imageNum; view++)
{
    sprintf(imgFile, "image_%04d.jpg", view+1);
    im = imread(imgFile);

    vector<KeyPoint> tmpKey;
    detector.detect(im, tmpKey);
    if (tmpKey.size() == 0){
        printf("%d\t%d no keypoints\n", obj, view);
        continue;
    }
    extractor.compute(im, tmpKey, feature);
    SIFTFeatures.push_back(feature);

    feature.release();
    im.release();
}

然后发生错误,说在分配大约800MB内存时内存不足。但我的笔记本电脑有16GB内存,所以我认为内存泄漏发生在某个地方。

最有可能的是SIFTFeatures.push_back(feature);

但我不知道为什么以及如何避免这种错误。

我使用SIFTFeature的原因是我需要将所有功能添加到BOWKMeansTrainer以提取BOW功能。

0 个答案:

没有答案