转换从IplImage*到cv::MAT

Conversion from IplImage* to cv::MAT

本文关键字:cv MAT IplImage 转换      更新时间:2023-10-16

我搜索将IplImage*转换为Mat,但所有答案都是关于转换为cvMat。

我该怎么做呢?Mat和cvMat有什么区别?

Thanks in advance

对于记录:看看core/src/matrix.cpp,似乎确实,构造函数cv::Mat(IplImage*)已经消失了。

但是我发现了另一个选择:

IplImage * ipl = ...;
cv::Mat m = cv::cvarrToMat(ipl);  // default additional arguments: don't copy data.

这是一个很好的解决方案

Mat(const IplImage* img, bool copyData=false);

推荐使用cv::cvarrToMat函数

cv::Mat -是OpenCV 2.x的基础数据结构

CvMat -是cv::Mat的旧C模拟物

查看Mat文档

// converts old-style IplImage to the new matrix; the data is not copied by default
Mat(const IplImage* img, bool copyData=false);
  • cv::Mat或Mat,两者相同。

  • Mat有一个操作符CvMat(),所以简单的赋值工作

将Mat转换为CvMat

Mat mat = ---------;
CvMat cvmat = mat;

将CVMat转换为Mat

Mat dst = Mat(cvmat, true);  

将Mat转换为IplImage*

> For Single Channel

IplImage* image = cvCloneImage(&(IplImage)mat); 

>

IplImage* image = cvCreateImage(cvSize(mat.cols, mat.rows), 8, 3);
IplImage ipltemp = mat;
cvCopy(&ipltemp, image);

希望这对你有帮助。干杯