Как преобразовать тип переменной Mat в тип переменной IplImage в OpenCV 2.0?
Я пытаюсь повернуть изображение в OpenCV.
Я использовал этот код, который нашел здесь при переполнении стека:
Mat source(img);
Point2f src_center(source.cols/2.0, source.rows/2.0);
Mat rot_mat = getRotationMatrix2D(src_center, 40.0, 1.0);
Mat dst;
warpAffine(source, dst, rot_mat, source.size());
Однажды у меня есть мой dst
Mat
тип переменной заполнен, я хотел бы положить его обратно в IplImage
тип переменной, есть идеи о том, как это сделать?
4 ответа
В новом интерфейсе OpenCV 2.0 C++ нет необходимости переключаться между Mat
а также IplImage
, но если вы хотите, вы можете использовать IplImage
оператор:
IplImage dst_img = dst;
Обратите внимание, что создается только заголовок IplImage, и данные (пиксели) будут опубликованы. Для получения дополнительной информации см. Интерфейс OpenCV C++ или image.cpp
пример в OpenCV-2.0/samples/c
каталог.
За то, что весь IplImage
объект, я использовал этот код:
Mat matImage;
IplImage* iplImage;
iplImage = cvCreateImage(cvSize(640,480), IPL_DEPTH_8U, 1);
iplImage->imageData = (char *) matImage.data;
Вы также можете скопировать данные вместо указателя:
memcpy(iplImage->imageData, matimage.data, 640*480);
Норман в своем блоге описывает следующее (хотя это не 2.0, это должно относиться к вашей проблеме.):
Чтобы преобразовать CvMat в IplImage, используйте функцию:
IplImage* cvGetImage( const CvArr* arr, IplImage* image_header );
Функция cvGetImage возвращает заголовок изображения для входного массива, который может быть матрицей - CvMat* или изображением - IplImage*. В случае изображения функция просто возвращает входной указатель. В случае CvMat * он инициализирует структуру image_header с параметрами входной матрицы. Использование:
IplImage stub, *dst_img;
dst_img = cvGetImage(src_mat, &stub);
В более поздних версиях OpenCV 2.4 и выше мы можем конвертировать его просто
cv::Mat inMat;
//do the stuffs
IplImage* outIPL = (IplImage*)(&IplImage(inMat));