创建Mat类

OpenCV提供了一个Mat类用于储存矩阵数据

  • Mat类保存矩阵类型的数据信息,包括向量、矩阵、灰度或彩色图像等数据
  • Mat类包括矩阵头(矩阵的尺寸、储存方法、地址和引用次数等)和指向储存数据的矩阵指针
  • OpenCV中复制和传递图像时,只是复制了矩阵头和指向储存数据的指针

创建Mat类

Mat a;//创建一个名为a的矩阵头
a = imread("test.jpg");//向a中赋值图像数据,矩阵指针指向像素数据
Mat b = a//复制矩阵头,并命名为b

创建了一个名为a的矩阵头,读入一张图像并将a中的矩阵指针指向该图像的像素数据

将a矩阵头的内容复制到b矩阵头中、a,b各自有自己的矩阵头,但矩阵指针指向同一个矩阵数据

可以通过任意一个矩阵头修改矩阵数据,但是,删除a变量时,b变量不会指向一个空数据

只有两个变量同时删除时,才会释放矩阵数据,因为矩阵头中标记了引用次数

只有矩阵引用次数为0才会释放矩阵数据

Mat类可储存数据类型

  • double
  • float
  • uchar(无符号整数)

声明一个指定类型的Mat类

Mat A = Mat_<double>(3,3);//创建一个3*3的矩阵存放double类型数据

​ OpenCV中的数据类型和取值范围

数组类型 具体类型 取值范围
CV_8U 8位无符号整数 0~255
CV_8S 8位符号整数 -128~127
CV_16U 16位无符号整数 0~65535
CV_16S 16位符号整数 -32768~32767
CV_32S 32位符号整数 -2147483648~2147483647
CV_32F 32位浮点整数 -FLT_MAX~FLT_MAX,INF,NAN
CV_64F 64位浮点整数 -DBL_MAX~DBL_MAX,INF,NAN

定义图像数据的通道(Channel)数,例如灰度图像数据是单通道数据,彩色图像数据是3或4通道数据

C1~单通道 C2~双通道 C3~3通道 C4~4通道

例如:CV_8UC1 表示8位单通道数据,用于表示8位灰度图

​ CV_8UC3表示8位3通道数据,用于表示8位彩色图

通过OpenCV数据类型创建Mat类

Mat a(640,480,CV_8UC3) //创建一个640*480的3通道矩阵用于存放彩色图像
Mat a(3,3,CV_8UC1) //创建一个3*3的8位无符号整数的单通道矩阵
Mat a(3,3,CV_8U) //创建单通道矩阵,C1标识可以省略

results matching ""

    No results matching ""