我正在实现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;
非常感谢任何建议。感谢。
答案 0 :(得分:1)
你是对的。我刚刚在Linux上使用 OpenCV 2.3进行了测试,确实存在内存泄漏 compute()
。这会影响 SiftDescriptorExtractor ,也可能影响其他类型,例如 SurfDescriptorExtractor , OrbDescriptorExtractor 和 BriefDescriptorExtractor 。
顺便说一下,请不要忘记在此代码末尾cvReleaseImage()
iplImage
调用的图像。{/ p>
答案 1 :(得分:0)
也使用2.3并且还使用SiftDescriptorExtractor遇到内存泄漏。 但是,其他描述符提取器没有此问题。 我建议在bugtracker中创建一个票据来通知开发人员。