创建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标识可以省略