OpenCV Mat to IplImage *转换

时间:2011-05-24 16:59:16

标签: opencv

我有一个指向图像的指针:

IplImage *img;

已转换为Mat

Mat mt(img);

然后,Mat被发送到一个函数,该函数获取对Mat的引用作为输入void f(Mat &m);

f(mt);

现在我想将Mat数据复制回原始图像。

你有什么建议吗?

最佳

阿里

3 个答案:

答案 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的所有数据的大小。

希望我帮助