2011-08-02 223 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中創建一張票以通知開發者。