Конвертация из IplImage* в cv:: мат

Я искал, чтобы преобразовать IplImage* в Mat, но все ответы были о преобразовании в cvMat.

Как я могу это сделать? и в чем разница между Mat и cvMat?

спасибо заранее

5 ответов


вот хорошее решение

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

для записей: взглянув на core/src / matrix.cpp кажется, что, действительно, конструктор cv::Mat(IplImage*) исчез.

но я нашел эту альтернативу:

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

рекомендуемый способ-это cv::cvarrToMat функции

cv::Mat - базовая структура данных для OpenCV 2.x

CvMat - старый аналог c cv::Mat


Проверьте 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 имеет оператор CvMat (), поэтому простое назначение работает

конвертировать коврик в CvMat

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

конвертировать CVMat в Mat

Mat dst = Mat(cvmat, true);  

преобразовать коврик в IplImage*

> Для Одного Канала

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

> Три Канал

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

надеюсь, это поможет вам. Ура :)