2010-03-18 85 views
12

我想在OpenCV中旋转图像。如何在OpenCV 2.0中的IplImage变量类型中转换Mat变量类型?

我用这个代码,我发现这里的堆栈溢出:

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

回答

17

在新的OpenCV 2.0 C++接口它是不是真的有必要从后MatIplImage之间切换来回,但如果你愿意,你可以使用IplImage操作:

IplImage dst_img = dst; 

请注意,只有IplImage头被创建并且数据(像素)将被共享。欲了解更多信息,请参阅目录中的OpenCV C++ interfaceimage.cpp示例。

+0

非常感谢!它确实有用!没想到我们可以像这样管理它。 – Spredzy

1

诺曼在his blog介绍以下(虽然不是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); 
14

对于具有整体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); 
0

OpenCV中的更高版本2.4及以上,我们可以简单地通过

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