2011-08-02 164 views
3

我目前正在实现SIFT从图像中提取特征点,并注意到当我得到描述符时,我有内存泄漏。无论如何,我可以释放班上可能会留下的记忆吗?SiftDescriptorExtractor导致内存泄漏

EDIT 添加更多细节到码块

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

这些变量都是什么?宣布它们,以便我们可以帮助你。 – karlphillip

+0

对不起,我编辑了帖子以进一步解释代码。 – Seb

+0

你是怎么想出这个代码中有内存泄漏的结论的?我想知道你是如何衡量的。 – karlphillip

回答

1

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

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

+0

糟糕,关于不包括我的OpenCV版本,但你是对的,它是2.3。看起来我将不得不跟踪罪魁祸首并修改CV源文件以从中创建一个新的lib和dll。感谢您为我验证问题。 – Seb

0

使用2.3也是SiftDescriptorExtractor的内存泄漏。 但其他描述符提取器不存在此问题。 我建议在bugtracker中创建一张票以通知开发者。