opencv之深拷貝及淺拷貝,IplImage裝換為Mat


一、(1)  淺拷貝:  

Mat B;  

B = image  // 第一種方式  

Mat C(image); // 第二種方式

這兩種方式稱為淺copy,是由於它們有不同的矩陣頭,但是它們共享內存空間,即指向一個矩陣。當圖像矩陣發生變化時,兩者相關聯,都會變化。

(2)深拷貝

Mat B,C;  

B = image.clone();       // 第一種方式  

image.copyTo(C); // 第二種方式  

深拷貝是真正的copy了一個新的圖像矩陣,此時image,B,C三者相互沒有影響。

二、IplImage裝換為Mat  

      IplImage* iplImage = cvLoadImage("E:\song.jpg",1);

     cv::Mat image2(iplImage,false);    //其中false為淺拷貝,而true為深拷貝,默認為false。IplImage 和image2共享同一份圖像數據。

此時需要注意釋放iplImage結構指向的內存時必須 調用函數:   cvReleaseImage(&iplImage);

當然opencv提供了另外一種指針類,無需手動釋放,但現在已經不用了,可以使用它來封裝IplImage指針: 

Ptr<IplImage> iplImage = cvLoadImage("E:\song.jpg",1); 

應該盡量避免使用這個廢棄的數據結構,而是使用cv::Mat。


免責聲明!

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



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