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。

轉自http://www.bubuko.com/infodetail-493981.html

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章