Mat 数据结构

介绍

  • Mat类
  • 历史:OpenCV从2001年开始发展,在最初使用的是c语言,使用的是IplImage数据结构来存储图像,但是最大的问题需要手动申请释放内从( manual memory management),从OpenCV2.0开始,开始使用C++接口的Mat,这是自动分配和释放内存的(automatic memory management)。

  • Mat有两部分组成
  1. 头部:存储方式、图像大小等信息,头部的大小是一个常量(constant)
  2. 数据块:图像像素的值(按行顺序存储)

NOTE1:大部分拷贝Mat,如拷贝构造、赋值操作,只是拷贝头部信息,他们指向同一个数据块,不同对象对其做操作,会影响到其他对象。如果想进行深拷贝用cv::Mat::copyTo 和cv::Mat::clone 方法

Mat F = A.clone();
Mat G;
A.copyTo(G);

NOTE2:有多个头部指向同一个Matrix,那么谁来对其进行销毁:最后一个使用的对象,OpenCV内部有引用的计数机制 (reference counting mechanism),当增加一个对象(只复制一个头部指向Matrix)counter+1;如果一个对象销毁,counter-1。最后一个对象对Matrix进行回收。


  • 存储方式
  1. 彩色RGB,注意OpenCV存储顺序是BGR
  2. HSV(色调、饱和度和值) and HLS(色调、亮度和饱和度):(hue, saturation and value/luminance)
  3. YCrCb:JPEG格式使用
  4. CIELab:测量颜色和颜色之间的距离时使用方便


Mat 的常见构造

官网Mat类

  • 独立数据创建
  1. 读图像
Mat src;
src = imread("./lena.png", IMREAD_COLOR)

  1. 给定 大小、通道数、初始值
Mat src(2,2, CV_8UC3, Scalar
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值