脚本宝典收集整理的这篇文章主要介绍了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()
下表是返回值以及对应含义
@H_512_187@
图像深度
枚举数值
空间大小
范围
等同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
uchar
8U
uchar
cv::Vec2b
cv::Vec3b
cv::Vec4b
char
8S
ushort
16U
short
16S
short
cv::Vec2s
cv::Vec3s
cv::Vec4s
int
32S
int
cv::Vec2i
cv::Vec3i
cv::Vec4i
float
32F
float
cv::Vec2f
cv::Vec3f
cv::Vec4f
cv::Vec6f
double
64F
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;
以上是脚本宝典为你收集整理的C++下的OpenCV中Mat类型存储的图像格式全部内容,希望文章能够帮你解决C++下的OpenCV中Mat类型存储的图像格式所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。