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
。我建议您花一些时间掌握 cvCreateImage
、cvCreateImageHeader
、cvCreateData
、cvReleaseImage
、cvReleaseImageHeader
、cvReleaseImageData
和 cvCloneImage
.
我是 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
。我建议您花一些时间掌握 cvCreateImage
、cvCreateImageHeader
、cvCreateData
、cvReleaseImage
、cvReleaseImageHeader
、cvReleaseImageData
和 cvCloneImage
.