在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,则输出如下: