opencv之Mat的定义

本文详细介绍了OpenCV中Mat类的定义,包括数据类型CV_8UC3的含义,以及如何通过Scalar赋值和基本操作如初始化、复制。重点讲解了Mat对象的构造和元素赋值方法,以及Mat::clone与Mat::copyTo的区别。
摘要由CSDN通过智能技术生成

学习内容:

1、Mat的定义 2、Mat的基本操作(一)

学习产出:

1、 Mat的定义

Mat本身是一个通用的矩阵类。因此,我们可以创建和操纵多维矩阵等方式来创建Mat对象。
例如:

Mat M(2,2,CV_8UC3,Scalar(0,0,255));

这句代码创建了一个名为M的Mat对象,这个M为一个多维矩阵,其最外一层为大小为2*2(rows,行数;cols ,列数),即宽为2,长为2的图像。
(1)其中,CV_8UC3用于存储元素的数据类型和每个矩阵点的通道数,即规定了外层矩阵的大小,这里初学的时候不好理解,我们可以类比C语言中的多维矩阵,实际上这里相当于用特定的规范语言来描述一个多维矩阵。
引用自:OpenCV CV_8UC3含义

CV_<bit_depth>(S|U|F)C<number_of_channels>
(1) bit_depth—比特数—代表8bite\16bite\32bite\64bite
eg:8表示你所创建的储存图片的Mat对象中,每个像素点在内存空间所占的空间大小8bite。
(2) S|U|F
S: signed int,即有符号整型;
U: unsigned int,即无符号整型;
F: float,单精度浮点型。
(3) C<number_of_channels>:所存储的图片的通道数。
eg 1—grayImg灰度图像—是—单通道图像
2—RGB彩色图像—是—3通道图像
3—带Alpha通道的RGB彩色图像—是—4通道图像

(2)这里用Scalar(0,0,255)赋给具有相同通道数的矩阵元素,即对内层进行赋值,Scalar是一个由长度为4的数组作为元素构成的结构体,Scalar最多可以存储四个值,没有提供的值默认是0。

这里引用[opencv Scalar()的使用心得]中的解释(https://blog.csdn.net/zqx951102/article/details/82797484)

在Opencv中,cvScalar是CV_RGB的宏,cvScalar的储存顺序是B-G-R,而CV_RGB的储存顺序是R-G-B,两者正好相反,所以你的cvScalar(255,0,0),实际意思是B=255,当然是蓝色的

因此Scalar(0,0,255)赋值颜色为红色。

2、Mat的基本操作(一)

(1)我们可以自己初始化一个小型矩阵,如下

Mat C =(Mat_ <double>3,3<< 0-1,0-1,5-1,0-1,0;
cout << “C =<< endl << “”“ << C << endl << endl;

输出
(2)这里我们可以使用Mat::clone与Mat::copyTo对Mat进行复制,copyTo不会为目标矩阵重新分配内存,而clone总是会为目标矩阵重新分配内存。具体参考Mat::clone与Mat::copyTo的区别
当我要提取图像某一通道信息时,可以使用下列语句

Mat RowClone = C.row(1.clone();
cout << “RowClone =<< endl << “” << RowClone << endl << endl;

输出在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值