Подтвердить что ты не робот

Как преобразовать тип переменной Mat в тип переменной IplImage в OpenCV 2.0?

Я пытаюсь повернуть изображение в OpenCV.

Я использовал этот код, который я нашел здесь в Stack Overflow:

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, любую идею о том, как это сделать?

4b9b3361

Ответ 1

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

IplImage dst_img = dst;

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

Ответ 2

Для наличия всего объекта 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);

Ответ 3

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

Ответ 4

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

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