我有一个指向图像的指针:
IplImage *img;
已转换为Mat
Mat mt(img);
然后,Mat
被发送到一个函数,该函数获取对Mat
的引用作为输入void f(Mat &m);
f(mt);
现在我想将Mat
数据复制回原始图像。
你有什么建议吗?
最佳阿里
答案 0 :(得分:2)
您的答案可在此处的文档中找到:http://opencv.willowgarage.com/documentation/cpp/c++_cheatsheet.html
编辑:
第一个代码区的前半部分确实讨论了你已经拥有的拷贝构造函数。
第一个代码区的后半部分回答了您的问题。为清晰起见,转载如下。
//Convert to IplImage or CvMat, no data copying
IplImage ipl_img = img;
CvMat cvmat = img; // convert cv::Mat -> CvMat
答案 1 :(得分:1)
对于以下情况:
double algorithm(IplImage* imgin)
{
//blabla
return erg;
}
我使用以下方式调用该函数:
cv::Mat image = cv::imread("image.bmp");
double erg = algorithm(&image.operator IplImage());
我已经做了一些测试,看起来图像对象将如何管理内存。运算符IplImage()
只会构造IplImage
的标题。也许这可能有用吗?
答案 2 :(得分:0)
您可以使用此表单:
您的密码:
plImage * img;
Mat mt(img);
F(公吨);
现在将Mat数据复制回原始图像。
img-> imageData =(char *)mt.data;
您也可以复制数据而不是指针:
memcpy(mt.data,img-> imageData,(mt.rows * mt.cols));
(mt.rows * mt.cols)是用于将mt复制到img的所有数据的大小。
希望我帮助