我的OpenCV学习笔记(一):OpneCV中的数据共享机制
2012-04-18 09:48
344 查看
OpenCV是一个很不错的开源计算机视觉库。我自己已经玩了一段时间了,决定把一些学习成果整理出来,分享给大家。学习OpenCV最好的助手当然是opencv自带的手册和教程了。手册是英文版的,方便查找函数。教程有部分是中文版的,也有一部分没有汉化。可以通过网址:http://www.opencv.org.cn/opencvdoc/2.3.2/html/index.html查看。
这次主要是想说一个opencv中的数据共享机制。先看程序:
程序做了一下几件事情:读入图片image,将image于result关联起来。OpenCV中一个重要的特点就是你不必事先指定图像的长、宽、像素深度等信息,库函数会自动帮你完成。然后对image图像进行滤波,显示滤波以后result图像的结果(注意:不是image的结果)。
对于图像result,程序中提供3种方式与图像image关联:第一种是是用“=”,第二种是用copyTo,第三种使用clone。运行代码可以发现:当使用“=”时,对image的滤波会导致result的图像改变;而使用clone或者copyTo不会引起result的改变。
原因是什么呢?因为使用“=”时,并没有复制新的数据,而只是让result指向image。它们指向的是内存中的同一份数据。等号操作以后,image的引用计数+1而已。这就是所谓的“浅拷贝”。而copyTo则是把矩阵的每个元素都重新拷贝给了result。copyTo不仅拷贝了矩阵元素值,还复制了矩阵的一些其他信息。它们是所谓的“深拷贝”。
这次主要是想说一个opencv中的数据共享机制。先看程序:
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> using namespace cv; //测试引用计数方面的问题 int main() { Mat image = imread("D:/picture/img.tif"); imshow("读入的图片",image); Mat result = image; //result = image.clone(); //image.copyTo(result); //滤波程序 blur(image,image,Size(7,7)); imshow("结果图片",result); waitKey(0); return 0; }
程序做了一下几件事情:读入图片image,将image于result关联起来。OpenCV中一个重要的特点就是你不必事先指定图像的长、宽、像素深度等信息,库函数会自动帮你完成。然后对image图像进行滤波,显示滤波以后result图像的结果(注意:不是image的结果)。
对于图像result,程序中提供3种方式与图像image关联:第一种是是用“=”,第二种是用copyTo,第三种使用clone。运行代码可以发现:当使用“=”时,对image的滤波会导致result的图像改变;而使用clone或者copyTo不会引起result的改变。
原因是什么呢?因为使用“=”时,并没有复制新的数据,而只是让result指向image。它们指向的是内存中的同一份数据。等号操作以后,image的引用计数+1而已。这就是所谓的“浅拷贝”。而copyTo则是把矩阵的每个元素都重新拷贝给了result。copyTo不仅拷贝了矩阵元素值,还复制了矩阵的一些其他信息。它们是所谓的“深拷贝”。
相关文章推荐
- OpenCV学习笔记(一)———OpneCV库简介(3.1.0)
- opencv学习笔记(七)-CvMat矩阵结构以及矩阵数据访问
- JS学习笔记——AngularJS 1.x双向数据绑定机制
- OpenCV Java学习笔记(一)--Mat矩阵的数据类型转换
- Laravel学习笔记(二)---路由,CSRF,HTTP中间件,RESTFul风格控制器注册路由,视图间共享数据
- Servlet学习笔记(六)-----数据共享和页面跳转
- opencv 2.x学习笔记(四)基本数据类型(二)
- OpenCV学习笔记 cv.Mat 与 .txt 文件数据的读写操作
- 我的OpenCV学习笔记(23):Mat中实际数据是如何保存的
- Redis学习笔记4--Redis数据存储优化机制
- Kinect开发学习笔记之(四)提取颜色数据并用OpenCV显示
- OpenCV学习笔记之一(OpenCV的基本数据类型)
- OpenCV学习笔记【6】:从摄像机读入数据
- OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年
- opencv学习笔记-入门(7)单通道的图像数据访问
- OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年
- OpenCV学习笔记(四十一)——再看基础数据结构core
- OpenCV3学习笔记-数据结构和基本绘图
- 第二行代码学习笔记——第七章:跨程序共享数据——探究内容提供器
- OpenCV学习笔记 -- 基本数据类型