我的OpenCV學習筆記:VideoCapture類


opnCV  學習博客
http://blog.csdn.net/thefutureisour/article/details/7472104

1 OpneCV中的數據共享機制

 

OpenCV是一個很不錯的開源計算機視覺庫。我自己已經玩了一段時間了,決定把一些學習成果整理出來,分享給大家。學習OpenCV最好的助手當 然是opencv自帶的手冊和教程了。手冊是英文版的,方便查找函數。教程有部分是中文版的,也有一部分沒有漢化。可以通過網址:http://www.opencv.org.cn/opencvdoc/2.3.2/html/index.html查看。

這次主要是想說一個opencv中的數據共享機制。先看程序:

 

 1     #include <opencv2/core/core.hpp>  
 2     #include <opencv2/highgui/highgui.hpp>  
 3     #include <opencv2/imgproc/imgproc.hpp>  
 4       
 5     using namespace cv;  
 6       
 7     //測試引用計數方面的問題  
 8     int main()  
 9     {  
10         Mat image = imread("D:/picture/img.tif");  
11         imshow("讀入的圖片",image);  
12       
13         Mat result = image;  
14         //result = image.clone();     
15         //image.copyTo(result);  
16           
17         //濾波程序  
18         blur(image,image,Size(7,7));  
19         imshow("結果圖片",result);  
20       
21         waitKey(0);  
22         return 0;  
23     }  
View Code

 

 
程序做了一下幾件事情:讀入圖片image,將image於result關聯起來。OpenCV中一個重要的特點就是你不必事先指定圖像的長、寬、像素深 度等信息,庫函數會自動幫你完成。然后對image圖像進行濾波,顯示濾波以后result圖像的結果(注意:不是image的結果)。

 對於圖像result,程序中提供3種方式與圖像image關聯:第一種是是用“=”,第二種是用copyTo,第三種使用clone。運行代碼 可以發現:當使用“=”時,對image的濾波會導致result的圖像改變;而使用clone或者copyTo不會引起result的改變。

原因是什么呢?因為使用“=”時,並沒有復制新的數據,而只是讓result指向image。它們指向的是內存中的同一份數據。等號操作以 后,image的引用計數+1而已。這就是所謂的“淺拷貝”。而copyTo則是把矩陣的每個元素都重新拷貝給了result。copyTo不僅拷貝了矩 陣元素值,還復制了矩陣的一些其他信息。它們是所謂的“深拷貝”。


免責聲明!

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



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