OpenCV中Mat的type类型与int值的对应以及初始化问题

在OpenCV中,数据类型可以使用int值来代替。

常量类型的命名规则为:CV_(位数)+(数据类型)+(通道数)。其与int值的对应关系为:

  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

U为无符号整型,S为有符号整型,F为浮点型。


char为1字节(8位)

short为2字节(16位)

long和int为4字节(32位)

float为4字节(32位)

double为8字节(64位)

CV_8UC1对应unsigned char

CV_8SC1对应signed char

CV_16UC1对应unsigned short

CV_16SC1对应signed short

CV_32UC1对应unsigned int或者unsigned long

CV_32SC1对应signed int或者signed long

CV_32FC1对应float

CV_64FC1对应double

在定义的同时进行初始化,需要注意利用数组进行初始化的时候,注意数组元素类型与Mat的数据类型的对应关系。否则会出现赋值异常。

double R_data[]={1.0000,0.0074,-3.9363e-04,-0.0074,0.9998,0.0210,5.4919e-04,-0.0210,0.9998};
cv::Mat R(3,3,CV_64FC1,R_data);//cv::Mat R(3,3,6,R_data);
cout<<"RRRRRRRRRRRRRR:"<<endl<<R<<endl;

这里的Mat  R初始化对应的R_data一定要为double,否则会赋值错误。

若R_data类型为float,则输出如下:

发布了58 篇原创文章 · 获赞 64 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ThorKing01/article/details/103435279