OpenCV: cvCloneImage and memory leak



我对OpenCV很陌生。我注意到以下代码存在内存泄漏:

IplImage *img, *img_dest;
img = cvLoadImage("..\..\Sunset.jpg", CV_LOAD_IMAGE_COLOR);
while(1) // to make the mem leak obvious
{
img_dest = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3);
img_dest = cvCloneImage(img);
cvReleaseImage( &img_dest );
}
cvReleaseImage( &img );

那么如何释放未引用的数据呢?有没有一种简单的方法来制作 IPL 图像的干净副本(当然我们可以编写一个循环来复制数据的每个元素......

对于内存泄漏问题:

cvCreateImage为映像分配了内存 A,cvCloneImage分配了内存 B(并克隆存储在img中的任何值,如代码中所述(。cvReleaseImage(&img_dest)仅释放内存 B,因此内存 A 未被引用,但不会解除分配。

对于 IPL 映像复制:

声明另一个内存并使用命令cvCopy,我认为使用它没有任何困难,而且安全高效。

如果要声明 IPL 映像标头而不分配用于存储映像值的数据字节,请改用CreateImageHeader。我建议你花一些时间掌握cvCreateImagecvCreateImageHeadercvCreateDatacvReleaseImagecvReleaseImageHeadercvReleaseImageDatacvCloneImage

相关内容

  • 没有找到相关文章

最新更新