cvrelease 会删除分配的内存吗?
Posted
技术标签:
【中文标题】cvrelease 会删除分配的内存吗?【英文标题】:does cvrelease delete the allocated memory? 【发布时间】:2010-10-27 18:42:05 【问题描述】:这可能是错误的处理方式,但我将 LabView 中的一个数组作为一个简单的 char 数组传递到我的 C++ 函数中。然后我创建一个 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 );
注意:它似乎不会影响我的图像,因为结果是正确的,但我想在我把它放在任何地方之前确保这是正确的
谢谢!
【问题讨论】:
别忘了标记您已经提出的其他问题的答案。 你可以使用 cvCloneImg() 代替 memcpy(),它做同样的事情但可能更合适。 【参考方案1】:cvRelease 释放图像使用的内存,因此在调用它之后,您将无法再引用该图像。
但是 - 在 openCV 存在之前,其他程序可能无法使用内存,它取决于系统如何处理内存,以及系统何时为其他应用程序返回释放的内存。
编辑:对不起,我没有真正回答你的问题。有一个标志可以传递给 cvCreateImage() 来表示 - 我拥有内存,不要删除它。该标志略微取决于您拥有的 opencv 版本
【讨论】:
【参考方案2】:我实际上发现了一篇关于 OpenCV 内存分配/释放的非常有趣的文章,我想这意味着我应该使用 cvReleaseImageHeader,因为我只是想删除标题。
http://www.andol.info/hci/963.htm
【讨论】:
以上是关于cvrelease 会删除分配的内存吗?的主要内容,如果未能解决你的问题,请参考以下文章