openc下cv::Mat和IplImage的相互轉換


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

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM