opencv中cvLoadImage和cvCloneImage的内存泄露问题
2014-08-27 10:19
169 查看
在程序中循环调用cvLoadImage函数的时候,有可能会出现内存溢出,而使程序崩溃。虽然在程序最后使用了cvReleaseImage进行了释放,但是还是不能成功释放。好的解决办法就是使用CvvImage类来代替。但是高版本的opencv是不具有这个类的,可以通过加载CvvImage.h和CvvImage.cpp文件,将类添加到工程文件中。然后利用该类的Load和GetImage来加载图像数据,并转换为IplImage图像指针。
cvCloneImage函数:
这个函数也会出现内存泄露!虽然可以释放,但程序复杂不知道在那里释放,因为它每次拷贝是制作图像的完整拷贝包括头、ROI和数据。不会覆盖以前的内容。每次使用时编译器会分配内存空间。
在使用cvCloneImage()的时候,其实是对源图像指针所指向的图像头、数据、ROI等进行了一个完全的拷贝,放在一个新的内存区域,函数结果使得目标图像指向新的内存,而原来用cvCreateImage()所分配的区域没有被正确释放,成为一片“悬挂地址区域”。在后面调用cvReleaseImage()的时候,释放的是后面其所指向的区域。
因此,要避免这种情况的出现,一种方法是:可以在cvCloneImage()前,先调用cvReleaseImage()来释放之前分配的地址区域。然后执行克隆函数cvCloneImage()操作。也可以在前面不分配空间,直接调用克隆操作。另外一种方法,如果使用cvCopy()函数操作,由于该函数并不会对图像指针分配空间,所以需要先自己用cvCreateImage()分配一段区域,然后调用拷贝函数cvCopy(),来对图像赋值。这样最后释放的是图像指针所指的地址区域。这两种方法都不会出现内存泄露的问题了。
CvvImage src; IplImage *psrcImg; psrcImg=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,3); src.Load(strName); psrcImg=src.GetImage(); cvReleaseImage(&psrcImg); src.Destroy();
cvCloneImage函数:
这个函数也会出现内存泄露!虽然可以释放,但程序复杂不知道在那里释放,因为它每次拷贝是制作图像的完整拷贝包括头、ROI和数据。不会覆盖以前的内容。每次使用时编译器会分配内存空间。
在使用cvCloneImage()的时候,其实是对源图像指针所指向的图像头、数据、ROI等进行了一个完全的拷贝,放在一个新的内存区域,函数结果使得目标图像指向新的内存,而原来用cvCreateImage()所分配的区域没有被正确释放,成为一片“悬挂地址区域”。在后面调用cvReleaseImage()的时候,释放的是后面其所指向的区域。
因此,要避免这种情况的出现,一种方法是:可以在cvCloneImage()前,先调用cvReleaseImage()来释放之前分配的地址区域。然后执行克隆函数cvCloneImage()操作。也可以在前面不分配空间,直接调用克隆操作。另外一种方法,如果使用cvCopy()函数操作,由于该函数并不会对图像指针分配空间,所以需要先自己用cvCreateImage()分配一段区域,然后调用拷贝函数cvCopy(),来对图像赋值。这样最后释放的是图像指针所指的地址区域。这两种方法都不会出现内存泄露的问题了。
相关文章推荐
- Opencv中cvLoadImage内存泄露问题
- cvLoadImage,cvCloneImage的内存泄露问题
- cvLoadImage,cvCloneImage的内存泄露问题
- cvLoadImage,cvCloneImage的内存泄露问题
- cvLoadImage,cvCloneImage的内存泄露问题
- OpenCV中的内存泄露问题
- OpenCV中的内存泄露问题(cvLoadImage,cvCloneImage)
- OpenCV中的内存泄露问题(cvLoadImage,cvCloneImage)
- OpenCV 的内存泄露问题(静态内存泄露)
- opencv中图像连续显示的内存泄露问题的解决办法
- OpenCV中的内存泄露问题(cvLoadImage,cvCloneImage)
- OpenCV中的内存泄露问题(cvLoadImage,cvCloneImage)
- OpenCV中的内存泄露问题(cvLoadImage,cvCloneImage)
- openCV人脸检测内存泄露问题
- OpenCV中的内存泄露问题(cvLoadImage,cvCloneImage)【转】
- OpenCV中的内存泄露问题(cvLoadImage,cvCloneImage)
- MFC和opencv一起使用时会莫名奇妙出现内存泄露问题
- OpenCV中的内存泄露问题(cvLoadImage,cvCloneImage)【转】
- OpenCV经常会出现一些内存泄露问题
- Opencv:IplImage*转Mat后的内存泄露问题