OpenCV中Mat與IplImage和CvMat類型之間的相互轉(zhuǎn)換Mat類型較CvMat和IplImage有更強的矩陣運算能力,,支持常見的矩陣運算(參照Matlab中的各種矩陣運算),,所以將IplImage類型和CvMat類型轉(zhuǎn)換為Mat類型更易于數(shù)據(jù)處理。 Mat類型可用于直接存儲圖像信息,,通過函數(shù)imread,、imwrite、imshow等實現(xiàn)(與Matlab中的函數(shù)相似),,似乎在某種程度上可以取代IplImage類型,。 (1)將IplImage類型轉(zhuǎn)換到Mat類型 Mat::Mat(const IplImage* img, bool copyData=false); 默認情況下,新的Mat類型與原來的IplImage類型共享圖像數(shù)據(jù),,轉(zhuǎn)換只是創(chuàng)建一個Mat矩陣頭,。當(dāng)將參數(shù)copyData設(shè)為true后,就會復(fù)制整個圖像數(shù)據(jù),。 例: IplImage* iplImg = cvLoadImage("greatwave.jpg", 1); Mat mtx(iplImg);// IplImage* ->Mat 共享數(shù)據(jù) // or : Mat
mtx = iplImg; (2)將Mat類型轉(zhuǎn)換到IplImage類型 同樣只是創(chuàng)建圖像頭,,而沒有復(fù)制數(shù)據(jù)。 例: IplImage ipl_img = img;// Mat -> IplImage (3)將CvMat類型轉(zhuǎn)換為Mat類型 與IplImage的轉(zhuǎn)換類似,,可以選擇是否復(fù)制數(shù)據(jù),。 Mat::Mat(const CvMat* m, bool copyData=false); (4)將Mat類型轉(zhuǎn)換為CvMat類型 與IplImage的轉(zhuǎn)換類似,不復(fù)制數(shù)據(jù),,只創(chuàng)建矩陣頭,。 例: // 假設(shè)Mat類型的imgMat圖像數(shù)據(jù)存在 CvMat cvMat = imgMat;// Mat -> CvMat |
|