我尝试提取大约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功能。