opencv之Mat的定义

  • Post author:
  • Post category:其他




学习内容:


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;

输出
在这里插入图片描述



版权声明:本文为maggiesir原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。