OpenCV学习:Mat结构中的数据共享机制

Posted 我来乔23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV学习:Mat结构中的数据共享机制相关的知识,希望对你有一定的参考价值。

   

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

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

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

  

  

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

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

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

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

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

 

  运行结果:

  

  

以上是关于OpenCV学习:Mat结构中的数据共享机制的主要内容,如果未能解决你的问题,请参考以下文章

opencv学习-Mat对象

opencv学习笔记详解基本图像容器Mat以及常用数据结构和函数

04302017OpenCV学习

opencv编程中错误提示:不存在从mat到cvmat适当的转换函数。

OpenCV实战——OpenCV核心数据结构

简单的opencv问题,如何把一个vector中的值传递给mat?