Как преобразовать тип переменной 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
, любую идею о том, как это сделать?
Ответы
Ответ 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));