OpenCV - cvExtractSURF 导致内存泄漏?

Posted

技术标签:

【中文标题】OpenCV - cvExtractSURF 导致内存泄漏?【英文标题】:OpenCV - cvExtractSURF is causing a memory leak? 【发布时间】:2010-10-07 23:07:27 【问题描述】:

我正在使用 OpenCV 函数:cvExtractSURF,但我发现内存泄漏很大。有没有人成功实现了这个调用?

我的代码如下:

IplImage *cvImage = [self CreateIplImageFromUIImage:image grayscale:YES];

CvMemStorage* storage = cvCreateMemStorage(0);

CvSeq *objectKeypoints = 0;
//CvSeq *objectDescriptors = 0;

CvSURFParams params = cvSURFParams(self.hessianThreshold, 0);
double tt = (double)cvGetTickCount();

//Extract the features
cvExtractSURF( cvImage, 0, &objectKeypoints, NULL, storage, params, 0);

tt = (double)cvGetTickCount() - tt;
//NSLog(@"%d features found in %gms seconds\n", objectKeypoints->total, tt/(cvGetTickFrequency()*1000.));

cvReleaseImage(&cvImage);
cvReleaseMemStorage(&storage);

任何可能泄漏的想法?当我注释掉这一行时:

cvExtractSURF( cvImage, 0, &objectKeypoints, NULL, storage, params, 0);

不会发生泄漏。

【问题讨论】:

亲爱的@aserbin3,如果你想帮opencv社区一个忙,-停止编辑关于(当时已经)死的c-api的4年前的帖子。那些来这里的菜鸟只会认为,它仍然有效。 (不是) 【参考方案1】:

函数 cvExtractSURF 创建一个 CvSURFPoint 类型的对象列表,并将指向它的指针放在 objectKeypoints 中。你必须释放它。

添加通话...

cvRelease((void **)&objectKeypoints);

【讨论】:

获得绿色复选标记 :) 我实际上不得不使用 cvRelease((void **)&objectKeypoints);不太清楚为什么会这样。 对。 cvRelease 通过临时多态性工作,这就是您需要演员表的原因。我懒得测试代码,否则我会抓住它。我已经更新了答案以包括演员表。哦。并感谢您的复选标记。

以上是关于OpenCV - cvExtractSURF 导致内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章

是啥导致“OpenCV(4.0.1)错误:断言失败(m.dims <= 2)”

因为计算机中丢失opencv_world310d.dll,导致opencv程序无法运行问题

OpenCV 2.2 窗口导致 OpenGL 出现问题

Opencv - 蒙版图像导致黑色图像

opencv.imshow 会导致 jupyter notebook 崩溃

OpenCV python inRange方法导致C++模块出错