2010-03-18 114 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));