Mat数据结构

本文介绍了OpenCV中的核心数据结构Mat,包括矩阵的内存分布、大小、步长、像素点的大小和通道等概念。通过MatStep管理步长,MatSize记录矩阵大小,并探讨了如何创建和显示Mat。最后,文章展示了如何修改Mat中的像素值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近开始opencv的学习,首先就要从opencv的矩阵开始学起了。opencv的矩阵是用Mat这个对象来存储的,并且提供了一些访问矩阵属性的函数,比如获取行数、列数、获取步长等等。

矩阵的内存分布

Mat的在内存中是线性存储的,矩阵是多维的,因此在存储矩阵数据的时候,需要将矩阵的分布变成线性的才行。例如二维数组,那么在内存中就是先存第一行,再存第二行,依此类推。相应的三维矩阵可以看成是多个二维矩阵,先存第一个二维矩阵,再存第二个二维矩阵,依次类推。Mat矩阵的数据在内存中的首地址为data

uchar* data;

矩阵大小

矩阵大小信息由MatSize这个类来管理,记录的是矩阵每个维度的大小,为什么这么简单的信息还要一个类来专门的记录呢?原因是Mat的维度是可变的,因此在变化的过程中需要销毁创建相应的数组,而且在这个类中重载了[]运算符,可以更加方便的获取每个维度的大小

struct CV_EXPORTS MatSize
{
    explicit MatSize(int* _p);
    int dims() const;
    Size operator()() const;
    const int& operator[](int i) const;
    int& operator[](int i);
    operator const int*() const;  // TODO OpenCV 4.0: drop this
    bool operator == (const MatSize& sz) const;
    bool operator != (const MatSize& sz) const;

  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值