Opencv中cvLoadImage内存泄露问题

当在处理大量图像时频繁使用cvLoadImage,可能导致内存泄漏。原因是每次调用都会分配新内存,原有内存未手动释放。解决方法包括在循环结束时使用cvReleaseImage释放,或使用CvvImage类配合Load函数,其会覆盖原有内存区域,程序结束时释放即可避免内存泄漏。
摘要由CSDN通过智能技术生成

cvLoadImage函数:

在程序中这个函数使用一次两次感觉不来,但在处理序列图像循环调用这个函数时,内存泄露的可能让你目瞪口呆!

最近,在一个2000张样张的数据集上进行批处理, 我观察任务管理器内存分配的情况,发现内存在不断的被消耗掉!

原因可能是,每次loadImage的时候,内存都会重新分配一块内存给它,而原来的只要没有人工释放,就会被保留。

因此,在本次循环结束时使用cvReleaseImage(&pImg);进行了释放,内存才不会被消耗干净。


在 网上还查到了另外的解决方法:

使用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为图像宽和高。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值