Как преобразовать тип переменной Mat в тип переменной IplImage в OpenCV 2.0? - PullRequest
12 голосов
/ 18 марта 2010

Я пытаюсь повернуть изображение в 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 ]

17 голосов
/ 22 марта 2010

В новом интерфейсе OpenCV 2.0 C ++ нет необходимости переключаться между Mat и IplImage, но при желании вы можете использовать оператор IplImage:

IplImage dst_img = dst;

Обратите внимание, что создается только заголовок IplImage, и данные (пиксели) будут предоставлены для общего доступа. Для получения дополнительной информации см. OpenCV C ++ интерфейс или image.cpp пример в каталоге OpenCV-2.0/samples/c.

15 голосов
/ 26 апреля 2012

Для получения всего объекта 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);
1 голос
/ 19 марта 2010

Норман в своем блоге описывает следующее (хотя это не 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);
0 голосов
/ 09 декабря 2016

В более поздних версиях OpenCV 2.4 и выше, мы можем конвертировать его просто

cv::Mat inMat;
//do the stuffs
IplImage* outIPL = (IplImage*)(&IplImage(inMat));
...