Преобразование из IplImage* в cv::MAT
Я искал, чтобы преобразовать IplImage* в Mat, но все ответы были о преобразовании в cvMat.
Как мне это сделать? а в чем разница между матом и 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
Проверьте документацию коврика.
// 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);
Надеюсь, это поможет вам. Ура:)