Question

I searched to convert an IplImage* to Mat, but all answers were about the conversion to cvMat.

How, can I do it? and what is the difference between Mat and cvMat?

Thanks in advance

Était-ce utile?

La solution 2

here is a good solution

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

Autres conseils

For the records: taking a look at core/src/matrix.cpp it seems that, indeed, the constructor cv::Mat(IplImage*) has disappeared.

But I found this alternative:

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

The recommended way is the cv::cvarrToMat function

cv::Mat - is base data structure for OpenCV 2.x

CvMat - is old C analog of cv::Mat

Check out the Mat documentation.

// converts old-style IplImage to the new matrix; the data is not copied by default
Mat(const IplImage* img, bool copyData=false);
  • cv::Mat or Mat, both are same.

  • Mat has a operator CvMat() so simple assignment works

Convert Mat to CvMat

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

Convert CVMat to Mat

Mat dst = Mat(cvmat, true);  

Convert Mat to IplImage*

> For Single Channel

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

> For Three Channel

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

Hope this helps you. Cheers :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top