目录1.Mat介绍2.Mat的深度和字节类型1.灰度图2.二值图像3.三通道图像4.四通道图像2.1.单通道分类2.2.双通道分类2.3.三通道分类2.4.四通道分类3.Mat的创建和构造方法3.1.Mat(int rows, int cols, int type);3.2.Mat(Size size, int type);3.3.Mat(int rows, int cols, int type, const Scalar s);3.4.Mat::zeros(rows,cols,type);3.5.Mat::ones(rows,cols,type);4.代码实现OPENCV创建Mat1.Mat介绍在OPENCV中Mat是整个图像存储的核心也是所有图像处理的最基础的类。Mat主要存储图像的矩阵类型包括向量、矩阵、灰度或者彩色图像等等。Mat的对象可以分成矩阵头和矩阵数据两个大部分矩阵头是存储图像的长度、宽度、色彩信息等头部信息矩阵数据则是存储具体的图像数据。若开发者想对OPENCV的Mat中的信息进行修改则是改变像素信息的数据部分。Mat的输出一般包含图像的宽度、高度、通道数量、通道深度、字节类2.Mat的深度和字节类型unsigned signed floatCV_16F含义16位浮点数范围半精度浮点数用途在OpenCV的较新版本尤其是在OpenCV 4.x及以后的DNN模块中为了支持AI加速如GPU上的FP16计算和减少内存占用而引入的重要类型。上面是Opencv的字节类型和通道数的定义在OPENCV中通常分为四个通道和8种数据类型。分别是单通道(灰度图)、双通道(二值图像)、三通道(RGB彩色图像)、四通道(带Alpha的四通道图像)。1.灰度图灰度图又称之为灰阶图颜色介于白色和黑色之间按对数关系分为若干等级这种图像称之为灰度。灰度分为256个阶2.二值图像二值图像中的图像中每一个像素只有两个值分别是0和1其中0表示黑色、1表示白色3.三通道图像三通道(RGB)图像也就是我们所说的RGB图像所以三通道图像可以用来彩色图像。4.四通道图像四通道(ARGB)也就是在彩色图像中2.1.单通道分类CV_8UC1:指的是一个8位无符号整型单通道矩阵CVCV 32SC1:指的是一个32位整型单通道矩阵CV_32FC1:指的是一个32位浮点型单通道矩阵CV_64FC1:指的是一个64位浮点型单通道矩阵CV_16SC1:指的是一个16位整型单通道矩阵2.2.双通道分类CV_8UC2:指的是一个8位无符号整型双通道矩阵CV_32SC2:指的是一个32位整型双通道矩阵CV_32FC2:指的是一个32位浮点型双通道矩阵CV_64FC2:指的是一个64位浮点型双通道矩阵CV_16SC2:指的是一个16位整型双通道矩阵2.3.三通道分类CV8UC3:指的是一个8位无符号整型三通道矩阵CV32SC3:指的是一个32位整型三通道矩阵CV_32FC3:指的是一个32位浮点型三通道矩阵CV_64FC3:指的是一个64位浮点型三通道矩阵CV16SC3:指的是一个16位整型三通道矩阵2.4.四通道分类CV_8UC4:指的是一个8位无符号整型四通道矩阵CV_32SC4:指的是一个32位整型四通道矩阵CV_32FC4:指的是一个32位浮点型四通道矩阵CVCV_64FC4:指的是一个64位浮点型四通道矩阵CV_16SC4:指的是一个16位整型四通道矩阵3.Mat的创建和构造方法Mat的创建一般分为五种方式分别是Mat(int rows, int cols, int type)、Mat(Size size, int type)、Mat::zeros(Size(width,height),type)下面我将把三种构造的方式都详细说一遍。3.1.Mat(int rows, int cols, int type);重载的构造函数这个构造函数在创建的时候提供矩阵的大小分别是rows、cols以及存储类型typerows行数也指的是图像的高度height。cols列数也指的是图像的宽度width。type通道类型具体的看上面的图示例Mat t1 Mat(300,300,CV_8UC1)这指的是创建一个width:300,height:300,单通道的灰度图像.3.2.Mat(Size size, int type);重载的构造函数这个构造函数在创建的时候需要传入Size类和类型。第一个传参Size结构体Size(width,height)第二个传参type通道类型具体的看上面的图示例Mat t2 Mat(Size(300,300),CV_8SC3)这指的是创建一个width:300,height:300,三通道的灰度图像3.3.Mat(int rows, int cols, int type, const Scalar s);重载的构造函数这个构造函数在创建的时候提供矩阵的大小分别是rows、cols、存储类型type、还有Scalar颜色标量。第一个传参rows行数也指的是图像的高度height。第二个传参cols列数也指的是图像的宽度width。第三个传参type通道类型具体的看上面的图第四个传参Scalar颜色标量Scalar(v0,v1,v2,v3)v0,v1,v2,v3分别对应OPENCV颜色分量的四个值示例Mat mat Mat(300,300,CV_8UC3,Scalar(255,255,255));表示的是创建一个cols:300,rows:300,三通道的灰度,颜色标量为白色的图像3.4.Mat::zeros(rows,cols,type);重载的构造函数这个构造函数在创建的时候提供矩阵的大小分别是rows、cols以及存储类型type。ZROS相当于创建一张黑色的图片每个像素通道为0并且Scalar(0,0,0)。第一个传参rows行数也指的是图像的高度height。第二个传参cols列数也指的是图像的宽度width。第三个传参type通道类型具体的看上面的图示例 Mat::zeros(300,300,CV_8SC3);这指的是创建一个width:300,height:300,三通道的彩色图像,Scalar(0,0,0)相当于 Mat mat Mat(300,300,CV_8SC3,Scalar(0,0,0));3.5.Mat::ones(rows,cols,type);重载的构造函数这个构造函数在创建的时候提供矩阵的大小分别是rows、cols以及存储类型type。ONES相当于每个像素第一个通道为1后面两个通道为0。第一个传参rows行数也指的是图像的高度height。第二个传参cols列数也指的是图像的宽度width。第三个传参type通道类型具体的看上面的图示例 Mat::ones(300,300,CV_8SC3)这指的是创建一个width:300,height:300, 三通道的彩色图像,Scalar(1,0,0)这等同于Mat mat Mat(300,300,CV_8SC3,Scalar(1,0,0));4.代码实现OPENCV创建Mat4.1. 实现Mat构造并保存到本地这指的是创建一个width:300,height:300,三通道的灰度图像, 粉色的图像4.2. 利用Mat(Size size, int type)构造生成矩阵数据并保存到本地这指的是创建一个width:256,height:256,三通道的图像。然后再用t1 Scalar(255,0,0);把矩阵变成蓝色最后把矩阵保存到本地4.3. 利用Mat::zeros(rows,cols,type)构造生成矩阵数据并保存到本地利用zeros去创建矩阵ZROS相当于创建一张黑色的图片每个像素通道为0并且Scalar(0,0,0)。然后把图片保存到本地4.4. 利用Mat::ones(rows,cols,type)构造生成矩阵数据并保存到本地利用ones去创建矩阵ONES相当于每个像素第一个通道为1后面两个通道为0相当于Scalar(1,0,0))然后把图片保存到本地