我的OpenCV学习笔记(一):OpneCV中的数据共享机制
来源:互联网 发布:卡尔曼滤波算法库 编辑:程序博客网 时间:2024/05/22 17:42
OpenCV是一个很不错的开源计算机视觉库。我自己已经玩了一段时间了,决定把一些学习成果整理出来,分享给大家。学习OpenCV最好的助手当然是opencv自带的手册和教程了。手册是英文版的,方便查找函数。教程有部分是中文版的,也有一部分没有汉化。可以通过网址:http://www.opencv.org.cn/opencvdoc/2.3.2/html/index.html查看。
这次主要是想说一个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中的数据共享机制
- OpenCV学习笔记(一)———OpneCV库简介(3.1.0)
- opnecv中仿射变换的相关函数学习笔记
- OpenCV学习笔记(一)初探OpenCV,显示我的照片
- 我的OpenCV学习笔记(24):详细讨论OpenCV中的数据结构
- 我的OpenCV学习笔记(2):opencv中的模糊算法
- 我的opencv学习笔记
- 我的OpenCV学习笔记(23):Mat中实际数据是如何保存的
- ContentProvider共享数据学习笔记(一)
- 我的OpenCV学习笔记(22):如何区别一幅图像是否是黑白图像
- OpenCV学习笔记(一) OpenCV的概…
- openCV学习笔记(一)---初始openCV
- OpenCV学习笔记(一)
- opencv学习笔记(一)
- 《学习OpenCV》笔记(一)
- OpenCV学习笔记(一)
- opencv学习笔记(一)
- opencv 学习笔记(一)
- 采用顺序存储实现栈的初始化、入栈、出栈操作。
- equals和hashCode方法
- UPDATE 语句 ORACLE /MSSQL 对比
- linux操作系统及内核
- 函数调用时发生了什么
- 我的OpenCV学习笔记(一):OpneCV中的数据共享机制
- jQuery阻止冒泡和HTML默认操作
- hosts文件
- 关于cocos2d相关的一些框架思考
- Ubuntu 操作经验
- ExtJS EditorGridPanel 控制每一个单元格是否可以编辑
- .NET源代码保护--MAXTOCODE
- Drools学习(三)实例
- 加快vs启动速度