OpenCV个人学习心得(1) —— Mat类

Mat

概念

Mat:用于读取和保存图像以及其他矩阵数据,默认尺寸为0

Mat中包含许多构造函数,用来构造一个矩阵,这些矩阵就是我们处理图像的基本的操作对象,其中的属性包括行列类型等。

Mat由两个数据部分组成:矩阵头和一个指向存储所有像素值的矩阵。

数据头包括:矩阵尺寸,存储的方法,存储地址等)

由于矩阵中的像素值可能会很庞大,那么OpenCV就利用了信息头,拷贝和使用时,只改变信息头,并不把整个矩阵再拷贝一份。只拷贝信息头和指向矩阵数据的指针。

Mat会有计数机制,当最后一个头被释放,计数值为0,那么矩阵就会被清理。如果只是想拷贝矩阵本身(不仅仅是信息头和矩阵指针)就用Clone()或者copyTo()

用法

基本的构造

    Mat(int rows, int cols, int type);

rows 矩阵行        cols列        type类型

类型例如CV_8UC1

CV_8UC3指的是:CV_ [每一项的位数][有无符号][类型前缀]C为字符型[通道数]

下面代码示例来理解一下type

    Mat M1(3,2,CV_8UC1,Scalar(0,0,255));
    Mat M2(3,2,CV_8UC2,Scalar(0,0,255));
    Mat M3(3,2,CV_8UC3,Scalar(0,0,255));
    cout << M1 << endl;
    cout << M2 << endl;
    cout << M3 << endl;

 可以看到,同样都是三行两列,0,0,255,显示不同的通道,是不一样的,画红色为一个单元。

下面一幅图更好的理解通道:来源于 官方文档(这是一个三通道类型矩阵)

 

Size类构造

    Mat(Size size, int type);

附带Scalar构造

    Mat(int rows, int cols, int type, const Scalar& s);
    Mat(Size size, int type, const Scalar& s);
    Mat(int ndims, const int* sizes, int type, const Scalar& s);
    Mat(const std::vector<int>& sizes, int type, const Scalar& s);

使用create

可以使用create(),这样可以先定义Mat对象,然后再使用其带有的create函数

   Mat M_without_parameter;
   M_without_parameter.create(4,4,CV_8UC3);
   cout << M_without_parameter << endl;

 简易构造

    Mat M_simple = (Mat_<double>(3,3) << 0, 7, 0, -1, 5, 4, 0, -1, 0);
    cout << M_simple << endl;

其他

使用ndims ,建立几维矩阵

   Mat(int ndims, const int* sizes, int type);

利用容器来构建,用容器来直接构建矩阵,可以直接用二维容器,也可以使用一个为行,另一个为每列的数组

    Mat(const std::vector<int>& sizes, int type);

可以进行拷贝

    Mat(const Mat& m);

这种拷贝方式,仅仅只是

将头和矩阵指针拷贝了,矩阵并没有增多。

附带初始数据构造

 Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP);

仅对Mat有初步了解 2022-4-4 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

圆圈圆圆圆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值