cvLoadImage内存泄露问题的解决

来源:互联网 发布:库里2016数据统计 编辑:程序博客网 时间:2024/05/22 17:32

cvLoadImage函数:

在程序中这个函数使用一次两次感觉不来,但在处理序列图像循环调用这个函数时,内存泄露的可能让你目瞪口呆,一般处理100帧,程序内存泄露飙到800M,就挂掉了。

即使你在loadimage之后,每次用cvReleaseImage施放掉,也无济于事。


在 网上查到了可行的方法,验证过,可以使用,非常感谢网友的分享精神。(在vs2008,opencv2.1中验证)

使用CvvImage类代替。并且使用CvvImage类的Load函数。

使用过程大概如下:

 //变量定义:

 CvvImage pSrcImg;

 IplImag *pSrcImgCopy ;                       //使用IplImag变量做个拷贝。毕竟IplImag 类处理方便。

 //获取图像:

 pSrcImg.Load(str);                                //str为Cstring类型的图像文件名

pSrcImgCopy = pSrcImg.GetImage();   //拷贝出pSrcImg的图像数据。

 //释放内存

 pSrcImg变量不需要每次释放,因为每次Load时是覆盖以前的内存区域。pSrcImgCopy同样。

 不过在程序结束时要释放,以免产生内存泄露或者别人以为你忘了。

 cvReleaseImage(&pSrcImgCopy );

pSrcImg.Destroy();

 不过要正确释放pSrcImgCopy时,声明时必须create下:

 pSrcImgCopy =cvCreateImage(cvSize(IMGWIDHT,IMGHEIGHT),IPL_DEPTH_8U, 3);

 //IMGWIDHT,IMGHEIGHT为图像宽和高。

 

原创粉丝点击