OpenCV(三) Opencv中 core 核心模块详解—— Mat类(一)

      之前列举了 OpenCV 中的12 个模块。现在对于每一个模块一一讲述,从 core 模块的 Mat 类开始 。

      1、什么是 Mat 类?

      Mat 类是用来保存图像以及其他矩阵数据结构(体素、向量场、直方图、张量、点云等)的数据结构,是从 OpenCV 2.0 以后才使用的,之前一直用 C 风格的 IplImage 。 使用 IplImage * 最大的问题就是容易造成内存泄露,管理内存相当麻烦 。而Mat 类的出现不需要我们手动为其开辟空间,也不需要在不需要它是立即释放。补充说明一下,很多 OpenCV 函数仍然手动地管理内存空间,这样不浪费内存,比如,传递一个已存在了的 Mat 对象时,开辟好了的那个空间会被再次使用。但,手动管理内存不再是必须的,对于初学者来说,完全不用考虑这些。    

      Mat 类由两部分组成:矩阵头和指向存储所有像素值的矩阵的指针。如何理解矩阵头呢?矩阵头相当于矩阵的说明书,它描述了矩阵的尺寸、存储方法、存储地址以及引用次数。何为引用次数?是这样的,矩阵头的尺寸是一个常数,不会随图像的变化而变化,但是存储图像的矩阵是随图像大小而变化的,一般来说,比矩阵头大好几个数量级。而在处理图像时,经常会遇到复制图像、传递图像的操作,此时如果复制整个矩阵,不仅耗费内存,还影响运行效率。所以,OpenCV中的“引用次数”,即“计数机制”,让每一个 Mat 对象都有一个矩阵头,但是它们共享一个矩阵。这是通过让矩阵指针指向同一个地址实现的。比如:

Mat 
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值