zoukankan      html  css  js  c++  java
  • OpenCV学习:Mat结构中的数据共享机制

       

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

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

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

      

      

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

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

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

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

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

      运行结果:

      

      

  • 相关阅读:
    ubuntu 12.04 mysql转移目录后 无法 启动
    thinkphp 缓存写入失败,网站报错
    python 访问php程序,实现定时
    Linux下通过软链接转移mysql目录,解决分区空间不足(转)
    nginx 自定义代理返回 404
    discuz xplus 模板 没解析的问题
    svn 日志 offline 错误
    nginx 代理 proxy_pass设置
    discuz注册 内部错误
    centos 不支持mysql
  • 原文地址:https://www.cnblogs.com/MakeView660/p/6579477.html
Copyright © 2011-2022 走看看