【发布时间】: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(),它做同样的事情但可能更合适。
标签: c++ memory-management opencv