使用Mat类,内存管理变得简单,不再像使用IplImage那样需要自己申请和释放内存。

  Mat是一个类,由两个数据部分组成:矩阵头(包含矩阵尺寸,存储方法,存储地址等信息)和一个指向存储所有像素值的矩阵的指针。 矩阵头的尺寸是常数值,但矩阵本身的尺寸会依图像的不同而不同,通常比矩阵头的尺寸大数个数量级。 复制矩阵数据往往花费较多时间,因此除非有必要,不要复制大的矩阵。

  为了解决矩阵数据的传递,OpenCV使用了引用计数机制。其思路是让每个Mat对象有自己的矩阵头信息,但多个Mat对象可以共享同一个矩阵数据,让矩阵指针指向同一地址而实现这一目的。 很多函数以及很多操作(如函数参数传值)只复制矩阵头信息,而不复制矩阵数据。

  

  

  对于图像img,程序中提供3种关联方式:

  第一种是赋值运算符:“=”,result1并没有复制新的数据,而只是指向img,它们指向内存中同一块数据,img的引用计数只是+1而已。

  第二种是clone,result2是img的一份拷贝。

  第三种是copyTo,result3也是img的一份拷贝。

  类似于C++中的拷贝构造,“=”可以看作是“浅拷贝”,而clone和copyTo可以看作是“深拷贝”。

  运行结果:

  

  

转载于:https://www.cnblogs.com/MakeView660/p/6579477.html

OpenCV学习:Mat结构中的数据共享机制相关推荐

  1. OpenCV学习笔记之Mat

    一. Mat介绍 在2001年刚刚出现的时候,OpenCV基于 C 语言接口而建.为了在内存(memory)中存放图像,当时采用名为 IplImage 的C语言结构体,时至今日这仍出现在大多数的旧版教 ...

  2. OpenCV学习笔记(五):Mat结构

    在之前的OpenCV学习笔记(一)用到的几种显示图像的方法中其中一种就是Mat.Mat结构在OpenCV 2.0后才得到广泛应用,相对于OpenCV1.0时代中的IplImage,它有个好处就是不用再 ...

  3. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  4. openCV学习教程(一):Mat类的使用

    Opencv3-Study Opencv学习笔记(八) -- 图像色彩空间转换 yuv422转opencv mat显示 OpenCv2 学习笔记(1) Mat创建.复制.释放 OpenCv学习笔记(二 ...

  5. OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年

    首先还是要感谢箫鸣朋友在我<OpenCV学习笔记(四十)--再谈OpenCV数据结构Mat详解>的留言,告诉我M.at<float>(3, 3)在Debug模式下运行缓慢,推荐 ...

  6. 某人写的openCV学习笔记

    原文地址:某人写的openCV学习笔记作者:拔剑 http://blog.csdn.net/thefutureisour 我的OpenCV学习笔记(25):c++版本的高斯混合模型的源代码完全注释 之 ...

  7. 某人写的openCV学习笔记_拔剑-浆糊的传说_新浪博客

    http://blog.csdn.net/thefutureisour 我的OpenCV学习笔记(25):c++版本的高斯混合模型的源代码完全注释 之前看到过C版本的,感觉写的很长,没有仔细看,但是C ...

  8. OpenCV学习笔记(六)(七)(八)(九)(十)

    OpenCV学习笔记(六)--对XML和YAML文件实现I/O操作 1. XML.YAML文件的打开和关闭 XML\YAML文件在OpenCV中的数据结构为FileStorage,打开操作例如: [c ...

  9. OpenCV学习之基本概念

    OpenCV学习之基本概念 文章目录 OpenCV学习之基本概念 1.访问像素级 2.基本API概念-Mat 3.直方图 1.访问像素级 方法一:使用模板函数at<>,必须指出矩阵单元类型 ...

最新文章

  1. 《用广义CNOT门产生质数幂维的图态》
  2. 微软MCITP系列课程(四)磁盘系统管理
  3. java threadgourp_Java Thread getThreadGroup()方法
  4. java读取json配置文件_解决:java 读取 resources 下面的 json 文件
  5. spring data jpa实现分页查询功能
  6. 论文总结:Fast and Light Bandwidth Testing for Internet Users(21‘ NSDI)
  7. 善良公社项目总结之如何从前台向后台传输数据
  8. java读写excel文件poi_Java利用POI读写Excel文件工具类
  9. 【Elasticsearch】请在64位平台上使用Lucene的MMapDirectory
  10. 网狐 游戏服务器 没有反应_游戏行业该怎么选择服务器?
  11. transform 动画效果
  12. 直方图均衡化原理及c++代码
  13. html dom之iframe对象
  14. 操作系统课程设计报告
  15. iOS非常全的第三方库
  16. python中转义字符与格式化字符的混合使用
  17. 【漏洞通告】CVE-2022-36803 Atlassian Jira Align权限提升漏洞
  18. 历代iphone详细对比
  19. 利用python如何抓取微博评论?
  20. Dynamic Web Project介绍及创建

热门文章

  1. ubuntu 16.04 编译 opencv_contrib 3.4, nonfree
  2. 深度解析容器化技术在广发证券交易系统的应用
  3. 屏蔽控制台应用程序的窗口#pragma comment(linker, /subsystem:windows /ENTRY:mainCRTStartup)...
  4. webapi 返回类型
  5. 某熊周刊:一周推荐外文技术资料(12.2)
  6. apache 开启Gzip网页压缩
  7. 通过启动项设置实现应用程序自启动功能
  8. 高档名片设计:12款专业的名片设计欣赏
  9. Java中反射的三种常用方式
  10. 中国科学院院士梅宏:云计算这十年