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程序无法运行问题