C++下的OpenCV中Mat类型存储的图像格式
1. Mat数据类型
Mat定义
是一个类,由两个数据部分构成,矩阵头(包含矩阵尺寸,存储方法,存储地址等等)和一个指向存储所有像素值的矩阵的指针
成员变量
int cv::Mat::cols; //返回矩阵的列数 int cv::Mat::rows // 返回矩阵行数 uchar* cv::Mat::data // 指向矩阵的数据单元的指针 int cv::Mat::dims // 返回矩阵维度,该维度≥2 MatSize cv::Mat::size // 返回矩阵大小
成员函数
获取图片高度:mat_name.cols
获取图片宽度:mat_name.rows
获取图像位深度,(即矩阵元素的存储方式,存储每个像素所用的位数):
mat_name.depth()
获取矩阵通道的数目:
mat_name.channnels()
获取存储的矩阵元素的数据类型(包括位深度,通道数,数据类型):
mat_name.type()
创建二维Mat对象
Mat Matrix_name(行数,列数,存储元素的数据类型,每个矩阵点的通道数)
存储元素的数据类型
CV_[位数][带符号与否][类型前缀]C[通道数]
带符号与否:S为符号整型,U为无符号整型,F为浮点型
例如CV_8UC3
通道数
Scalar是一个short型的向量,能够使用指定的定制化值来初始化矩阵,还可以用来表示颜色
2. 图像格式
图像深度
图像位深度=比特数+数据类型
C++中OpenCV库的获取方式:(函数原型)
int Mat::depth()
下表是返回值以及对应含义
| 图像深度 | 枚举数值 | 空间大小 | 范围 | 等同C++变量 | 
|---|---|---|---|---|
| CV_8U | 0 | 8bits | 0~255 | unsigned char | 
| CV_8S | 1 | 8bits | -128~127 | char | 
| CV_16U | 2 | 16bits | 0~65535 | ushort,unsigned short int,unsigned short | 
| CV_16S | 3 | 16bits | -32768~32767 | short,short int | 
| CV32S | 4 | 32bits | -2147483648~2147483647 | int,long | 
| CV32F | 5 | 32bits | 1.18e-38~3.40e38 | float | 
| CV_64F | 6 | 64bits | 2.23e-308~1.79e308 | double | 
| CV_USRTYPE1 | 7 | - | 
图像通道数
C++中OpenCV库的获取方式:(函数原型)
int Mat:channels()
图像类型
图像类型=比特数+数据类型+通道数
存储元素的数据类型:
CV_[位数][带符号与否][类型前缀]C[通道数]
带符号与否:S为符号整型,U为无符号整型,F为浮点型
C++中OpenCV库的获取方式:(函数原型)
int Mat:type()
具体数据类型与返回值关系:
| C1 | C2 | C3 | C4 | ||
|---|---|---|---|---|---|
| CV_8U | 0 | 8 | 16 | 24 | |
| CV_8S | 1 | 9 | 17 | 25 | |
| CV_16U | 2 | 10 | 18 | 26 | |
| CV_16S | 3 | 11 | 19 | 27 | |
| CV_32S | 4 | 12 | 20 | 28 | |
| CV_32F | 5 | 13 | 21 | 29 | |
| CV_64F | 6 | 14 | 22 | 30 | |
| 用户定义 | 7 | 
单个元素的访问
使用at方式进行访问,在at的时候需要指定的数据类型对照表如下:
| 种类 | C1 | C2 | C3 | C4 | C6 | 
|---|---|---|---|---|---|
| uchar8U | uchar | cv::Vec2b | cv::Vec3b | cv::Vec4b | |
| char8S | |||||
| ushort16U | |||||
| short16S | short | cv::Vec2s | cv::Vec3s | cv::Vec4s | |
| int32S | int | cv::Vec2i | cv::Vec3i | cv::Vec4i | |
| float32F | float | cv::Vec2f | cv::Vec3f | cv::Vec4f | cv::Vec6f | 
| double64F | double | cv::Vec2d | cv::Vec3d | cv::Vec4d | cv::Vec6d | 
示例如下:
cv::Vec3b vec3b = img.at<cv::Vec3b>(0,0); uchar vec3b0 = img.at<cv::Vec3b>(0,0)[0]; uchar vec3b1 = img.at<cv::Vec3b>(0,0)[1]; uchar vec3b2 = img.at<cv::Vec3b>(0,0)[2]; std::cout<<"vec3b = "<<vec3b<<std::endl; std::cout<<"vec3b0 = "<<(int)vec3b0<<std::endl; std::cout<<"vec3b1 = "<<(int)vec3b1<<std::endl; std::cout<<"vec3b2 = "<<(int)vec3b2<<std::endl;
相关推荐
  learningCV    2020-11-10  
   learningCV    2020-08-25  
   huang00    2020-08-21  
   wangdaren    2020-08-15  
   BeanJoy    2020-07-28  
   csdmeb    2020-06-25  
   wangdaren    2020-06-14  
   pythonxuexi    2020-06-13  
   woniulx0    2020-06-13  
   greent00    2020-06-10  
   liangzuojiayi    2020-06-09  
   greent00    2020-06-09  
   csdmeb    2020-06-08  
   BeanJoy    2020-06-06  
   lihuifei    2020-06-05  
   wangdaren    2020-06-03  
   wangdaren    2020-05-31  
 