cvrelease删除分配的内存?

时间:2010-10-27 18:42:05

标签: c++ memory-management opencv

这可能是错误的做事方式,但我将一个数组从LabView传递到我的C ++函数中,作为一个简单的char数组。然后我创建一个OpenCV图像并将指针指向我传递的数据。在函数的最后我使用cvReleaseImage删除所有OpenCV图像,是否会删除原始指针的数据?

另外,是否有更好的方法来执行修改原始图像的就地操作?

EXPORT void smoothImg(uchar * the_img, int size_x, int size_y)
{
 CvSize size;
 size.height = size_y ;
 size.width = size_x;

 IplImage * img1 = cvCreateImageHeader(size, IPL_DEPTH_8U, 1);
 img1->imageData = (char *)the_img;
 img1->imageDataOrigin = img1->imageData;

 IplImage * img2 = cvCreateImage(size, IPL_DEPTH_8U, 1);
// this is because I want my end result to be in img1 (same data as my the_img
 memcpy(img2->imageData,img1->imageData,sizeof(char)*size_x*size_y);

 cvSmooth(img2,img1,CV_BLUR, 5,5);

 cvReleaseImage(&img1 );
 cvReleaseImage(&img2 );

}

注意:它似乎不会影响我的图像,因为结果是正确的,但我想确保在我把它放到任何地方之前这是正确的

谢谢!

2 个答案:

答案 0 :(得分:4)

cvRelease释放图像使用的内存,因此在调用后,您将无法再引用该图像。

但是 - 在openCV存在之前,内存可能无法用于其他程序,它依赖于系统处理内存的方式,实际上当系统为其他应用程序返回免费内存时。

编辑:对不起我没回答你的问题。有一个标志你可以传递给cvCreateImage()来说 - 我拥有内存,不要删除它。该标志略微取决于您拥有的opencv版本

答案 1 :(得分:1)

我实际上发现了一篇关于OpenCV的内存分配/释放的非常有趣的文章,我想这意味着我应该使用cvReleaseImageHeader,因为我只是试图删除标题。

http://www.andol.info/hci/963.htm