Как преобразовать тип переменной 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());

Однажды у меня есть мой dstMat тип переменной заполнен, я хотел бы положить его обратно в 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));
Другие вопросы по тегам