13

我正在尝试在 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变量类型,关于如何做到这一点的任何想法?

4

4 回答 4

17

在新的 OpenCV 2.0 C++ 接口中,实际上并没有必要在 and 之间来回切换MatIplImage但如果您愿意,可以使用IplImage运算符:

IplImage dst_img = dst;

请注意,仅创建 IplImage 标头并且将共享数据(像素)。有关更多信息,请参阅 OpenCV C++ 接口或目录image.cpp中的示例OpenCV-2.0/samples/c

于 2010-03-22T14:18:40.927 回答
15

为了拥有整个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);
于 2012-04-26T00:04:01.797 回答
1

Norman 在他的博客中描述了以下内容(虽然它不是 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);
于 2010-03-19T07:58:17.993 回答
0

在更高版本的 OpenCV 2.4 及以上版本中,我们可以简单地转换它

cv::Mat inMat;
//do the stuffs
IplImage* outIPL = (IplImage*)(&IplImage(inMat));
于 2016-12-09T06:14:57.880 回答