opencv之Mat的定义

学习内容:

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_(S|U|F)C
(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:所存储的图片的通道数。
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;

输出在这里插入图片描述

你可能感兴趣的:(opencv图像处理,opencv,计算机视觉,图像处理)