OPenCV的Mat类数据类型总结

在openCV 中经常会遇到需要访问mat类对象中的数据的情况,所以必须真确填写相应的数据类型。

1、OpenCV中的数据类型和常用的数据类型对应关系如下:

Mat_<uchar>---------CV_8U
Mat<char>-----------CV_8S
Nat_<short>---------CV_16S
Mat_<ushort>--------CV_16U
Mat_<int>-----------CV_32S
Mat_<float>----------CV_32F
Mat_<double>--------CV_64F

2、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)

注:

一般的图像文件格式使用的是 Unsigned 8bits吧,CvMat矩阵对应的参数类型就是 CV_8UC1,CV_8UC2,CV_8UC3。(最后的1、2、3表示通道数,譬如RGB3通道就用CV_8UC3)

而float 是32位的,对应CvMat数据结构参数就是:CV_32FC1,CV_32FC2,CV_32FC3...
double是64bits,对应CvMat数据结构参数:CV_64FC1,CV_64FC2,CV_64FC3等。

变换这种矩阵数据类型,Mat类的函数convertTo()可以办到:
C++: void Mat::convertTo(OutputArray m,int rtype, double alpha=1, double beta=0 ) const

  • M-输出矩阵,如果在操作之前没有合适的大小或类型,则重新分配。
  • rType -期望的输出矩阵类型,或者,因为通道的数量与输入具有相同的深度;如果Rtype是负的,则输出矩阵将具有与输入相同的类型。
  • α-可选比例因子。
  • β-可选的增量与比例因子相加。
mask.convertTo(OutputArray m, CV_8UC3, -1.0, 255.0); // inverse the mask matrix  means I_new(x,j) = -1*I(x,j) + 255.





猜你喜欢

转载自blog.csdn.net/weixin_40647819/article/details/80380836