3

我目前正在实施 SIFT 以从图像中提取特征点,并注意到在获取描述符时出现内存泄漏。无论如何我可以释放课堂上可能附加的内存吗?

编辑 向代码块添加了更多详细信息

cv::SiftFeatureDetector* features = new cv::SiftFeatureDetector();
cv::SiftDescriptorExtractor* extractor = new cv::SiftDescriptorExtractor();

std::vector<cv::KeyPoint> KeyPoints;
cv::Mat Descriptors;

// Turn the image into a Mat
cv::Mat mImage = cv::Mat(iplImage);

printf("Searching for keypoints in: %s.\n", szName.c_str());

// Detect keypoints
features->detect(mImage, KeyPoints);

printf("Found %d keypoints.\n", KeyPoints.size());

// Extract descriptors
extractor->compute(mImage, KeyPoints, Descriptors);

printf("Found %d descriptors.\n\n", Descriptors.rows);

// Let my memory go!
delete extractor;
delete features;

任何意见是极大的赞赏。谢谢。

4

2 回答 2

1

你是对的。我刚刚在 Linux 上使用OpenCV 2.3 进行了测试,确实存在内存泄漏 compute()。这会影响SiftDescriptorExtractor,也可能影响其他类型,例如SurfDescriptorExtractorOrbDescriptorExtractorBriefDescriptorExtractor

顺便说一句,不要忘记在此代码末尾cvReleaseImage()调用的图像。iplImage

于 2011-08-02T20:07:28.507 回答
0

也使用 2.3 并且还会遇到使用 SiftDescriptorExtractor 的内存泄漏。然而,其他描述符提取器没有这个问题。我建议在 bugtracker 中创建一张票以通知开发人员。

于 2011-08-06T09:16:59.520 回答