我的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