25

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

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

提前致谢

4

5 回答 5

43

作为记录:查看 core/src/matrix.cpp 似乎构造函数确实cv::Mat(IplImage*)消失了。

但我找到了这个替代方案:

IplImage * ipl = ...;
cv::Mat m = cv::cvarrToMat(ipl);  // default additional arguments: don't copy data.
于 2015-06-15T16:01:18.713 回答
14

这是一个很好的解决方案

Mat(const IplImage* img, bool copyData=false);
于 2013-04-22T09:44:43.250 回答
11

推荐的方式是cv::cvarrToMat函数

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

CvMat- 是旧的 C 类比cv::Mat

于 2013-04-10T11:56:15.450 回答
5

查看Mat 文档

// converts old-style IplImage to the new matrix; the data is not copied by default
Mat(const IplImage* img, bool copyData=false);
于 2013-04-10T11:57:28.380 回答
4
  • cv::Mat 或 Mat,两者都是一样的。

  • Mat 有一个操作符 CvMat() 所以简单的赋值就可以了

将 Mat 转换为 CvMat

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

将 CVMat 转换为 Mat

Mat dst = Mat(cvmat, true);  

将 Mat 转换为 IplImage*

> 对于单通道

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

> 三通道

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

希望这对您有所帮助。干杯:)

于 2016-01-12T04:05:10.323 回答