【问题标题】:OpenCV Mat to IplImage* conversionOpenCV Mat 到 IplImage* 的转换
【发布时间】:2011-05-24 16:59:16
【问题描述】:

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

IplImage *img;

已转换为Mat

Mat mt(img);

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

f(mt);

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

你有什么建议吗?

最好的 阿里

【问题讨论】:

  • 转换Mat mt(img) 不会对图像数据进行任何复制,因此您无需执行任何操作,只要您不执行重新分配的操作(例如,将 mt 分配给一个独立的其他垫子)。

标签: opencv


【解决方案1】:

您的答案可以在此处的文档中找到: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

【讨论】:

  • 备忘单只是谈到了复制构造函数,而不是我要找的。我有一个已经填充的图像和一个 Mat 应该复制到图像的数据部分。顺便说一句,感谢您的回答。
  • 指向 IplImage 的指针已传递给函数。在函数内部,一个 Mat 已被一些数据填充。如果我只使用 *ipl_image = mat;不会复制任何数据,只会进行标头转换,当我从函数返回时,由于 Mat 内存空间已释放,指向它的指针也无用。我正在寻找类似 ipl_img->copy(Mat) 的东西,它将具有相同图像大小的 Mat 数据复制到 ipl_image 数据中。
  • 其实这是我的代码:codeint test(IplImage **srcImage, int num_images) { vector<Mat> images(num_images); for (int i = 0; i < num_images; ++i) { images[i] = Mat(srcImage[i]); // I guess this is correct! .... // some manipulation on images[i] } for (int i = 0; i < num_images; ++i) { srcImage[i] = ?????? } }
  • 这样的东西应该可以工作,但我正在寻找一种标准的方式for (int i = 0; i < num_images; ++i) { cvReleaseImage(&srcImage[i]); srcImage[i] = new IplImage(images[i]); } }
【解决方案2】:

对于以下情况:

double algorithm(IplImage* imgin)
{
    //blabla
    return erg;
}

我使用如下方式调用函数:

cv::Mat image = cv::imread("image.bmp");
double erg = algorithm(&image.operator IplImage());

我做了一些测试,图像对象将如何管理内存。运算符IplImage() 只会构造IplImage 的标头。也许这可能有用?

【讨论】:

    【解决方案3】:

    你可以使用这个表格:

    您的代码:

    plImage *img;

    垫 mt(img);

    f(mt);

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

    img->imageData = (char *) mt.data;

    你也可以复制数据而不是指针:

    memcpy(mt.data, img->imageData, (mt.rows*mt.cols));

    (mt.rows*mt.cols) 是将 mt 的所有数据复制到 img 时应使用的大小。

    希望我能帮上忙

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-02
      • 2011-09-04
      • 2011-06-07
      相关资源
      最近更新 更多