2010-03-18 9 views
12

Ich versuche ein Bild in OpenCV zu drehen.Wie konvertiert man einen Mat-Variablentyp in einem IplImage-Variablentyp in OpenCV 2.0?

ich diesen Code verwendet haben, die ich hier auf Stack-Überlauf gefunden:

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()); 

Einmal habe ich meine dstMat Variablentyp gefüllt Ich mag würde es wieder in ein IplImage Variablentyp setzen, eine Idee darüber, wie man das macht?

Antwort

17

Im neuen OpenCV 2.0 C-Schnittstelle ++ ist es nicht wirklich notwendig, von der Rückseite zu ändern und her zwischen Mat und IplImage, aber wenn Sie Sie möchten, können Sie die IplImage Operator verwenden:

IplImage dst_img = dst; 

Beachten Sie, dass nur der Header IplImage erstellt wird und die Daten (Pixel) gemeinsam genutzt werden. Weitere Informationen finden Sie im Verzeichnis OpenCV C++ interface oder image.cpp im Verzeichnis OpenCV-2.0/samples/c.

+0

Vielen Dank! Es hat funktioniert! Ich dachte nicht, wir könnten es so schaffen. – Spredzy

1

Norman in his blog beschreibt die folgende (Obwohl es nicht 2.0 ist, sollte es für Ihr Problem anwenden.):

Um von CvMat zu IplImage zu verwandeln, Verwenden Sie die Funktion:

IplImage* cvGetImage(const CvArr* arr, IplImage* image_header); 

Die Funktion cvGetImage gibt den Bildkopf für das Eingabearray zurück, das eine Matrix sein kann - CvMat * oder image - IplImage *. Im Falle eines Bildes gibt die Funktion einfach den Eingabezeiger zurück. Im Fall von CvMat * initialisiert es image_header Struktur mit Parametern der Eingabematrix. Verbrauch:

IplImage stub, *dst_img; 
dst_img = cvGetImage(src_mat, &stub); 
14

für das ganze IplImage Objekt hat, habe ich diesen Code verwendet:

Mat matImage; 
IplImage* iplImage; 

iplImage = cvCreateImage(cvSize(640,480), IPL_DEPTH_8U, 1); 
iplImage->imageData = (char *) matImage.data; 

Sie auch die Daten statt Zeiger kopieren:

memcpy(iplImage->imageData, matimage.data, 640*480); 
0

In späteren Versionen von OpenCV 2.4 und höher wir können es einfach umwandeln

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