Я искал, чтобы преобразовать IplImage * в Mat, но все ответы были о преобразовании в cvMat.
Как мне это сделать? а в чем разница между матом и cvMat?
заранее спасибо
вот хорошее решение
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
Проверьте Мат документация.
// 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 *
> Для одного канала
IplImage* image = cvCloneImage(&(IplImage)mat);
> Для трех каналов
IplImage* image = cvCreateImage(cvSize(mat.cols, mat.rows), 8, 3);
IplImage ipltemp = mat;
cvCopy(&ipltemp, image);
Надеюсь, это поможет вам. Ура 🙂