opencv2.0的類CV::Mat和opencv1.0的IplImage之間煩人轉換:
cv::Mat matimg = cv::imread ("girl.jpg"); IplImage* iplimg; *iplimg = IplImage(matimg); IplImage* iplimg = cvLoadImage("girl.jpg"); cv::Mat matimg; matimg = cv::Mat(iplimg);
實際上盡量用2.0,因為opencv2.0是用c++寫的很棒,沒有指針問題一說。c的指針要自己小心小心噢。
MatMat 與 IplImage 和 CvMat 的轉換:
在 OpenCV 2 中雖然引入了方便的 , 出於兼容性的考慮, OpenCV依然是支持C語言接口的IplImage和CvMat結構。如果你要與以前的代碼兼容, 將會涉及 MatMatMat與 IplImage和 CvMat的轉換。
Mat轉為IplImage和CvMat格式:
Mat img(Size(320,240),CV_8UC3); ...... IplImage iplimg = img;//轉為IplImage結構 如何要轉成CvMat類型: CvMat cvimg =img;//轉為CvMat
需要注意的是,類型轉換后IplImage和CvMat、Mat共用一個矩陣數據。IplImage和CvMat沒有計數功能,img數據釋放,那么IplImage和CvMat也就失去數據了。
IplImage和CvMat格式轉為Mat:
Mat有二個構造函數,可以實現iplimage和CvMat到Mat的轉換。這兩個函數都有一參copyData。如果copyData的值是 false,那么MatMatMat將與IplImage或CvMat共用同一矩陣數據;如果值是true,Mat會新申請內存,然后將會新申請內存,然后將 IplImage或 CvMatCvMat CvMat的數據復制到 Mat的數據區。
如果共用數據,Mat也將不會使用引計數來管理內存,需要開發者 不會使用引計數來管理內存。建議做此轉換是將參數置為true,這樣內存管理變得簡單 。
Mat::Mat(const Cvmat *m,bool copyData=false) Mat::Mat(const IplImage *img,bool copyData=false) =================== ImlImage *iplimg = cvLoadImage("girl.jpg"); Mat im(iplimg,true);