2010-03-18 2 views
12

Sto provando a ruotare un'immagine in OpenCV.Come convertire un tipo di variabile Mat in un tipo di variabile IplImage in OpenCV 2.0?

Ho usato questo codice che ho trovato qui su 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()); 

Una volta che ho il mio dstMat tipo di variabile riempito vorrei rimetterlo a un tipo di variabile IplImage, qualche idea su come farlo?

risposta

17

Nel nuovo OpenCV 2.0 C++ interfaccia non è davvero necessario per passare da avanti e indietro tra Mat e IplImage, ma se si desidera è possibile utilizzare la IplImage dell'operatore:

IplImage dst_img = dst; 

Si noti che viene creata solo l'intestazione IplImage e i dati (pixel) saranno condivisi. Per ulteriori informazioni, consultare lo OpenCV C++ interface o l'esempio image.cpp nella directory OpenCV-2.0/samples/c.

+0

Grazie mille! Ha funzionato! Non pensavo che potremmo gestirlo in questo modo. – Spredzy

1

Norman nel his blog viene descritto il seguente (Anche se non è 2.0, si dovrebbe applicare al vostro problema.):

per trasformare da CvMat a IplImage, Utilizzare la funzione:

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

La funzione cvGetImage restituisce l'intestazione dell'immagine per l'array di input che può essere matrice - CvMat * o image - IplImage *. Nel caso dell'immagine, la funzione restituisce semplicemente il puntatore di input. Nel caso di CvMat * inizializza la struttura image_header con i parametri della matrice di input. Uso:

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

Per avere l'intero IplImage oggetto, ho usato questo codice:

Mat matImage; 
IplImage* iplImage; 

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

È inoltre possibile copiare i dati al posto del puntatore:

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

Nelle versioni successive di OpenCV 2.4 e superiori , possiamo convertirlo semplicemente da

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