OpenCV:cvCloneImage 和内存泄漏

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 为图像分配 memoryA,cvCloneImage 分配 memoryB(并克隆存储在 img 中的任何值,如代码中所述)。 cvReleaseImage(&img_dest) 仅解除分配 memoryB,因此 memoryA 未被引用但未被解除分配。

对于您的 IPL 图像复制:

声明另一个内存并使用命令cvCopy,我没有看到任何使用它的困难,它是安全和高效的。

如果您希望声明一个 IPL 图像头而不分配用于存储图像值的数据字节,请改用 CreateImageHeader。我建议您花一些时间掌握 cvCreateImagecvCreateImageHeadercvCreateDatacvReleaseImagecvReleaseImageHeadercvReleaseImageDatacvCloneImage .