OpenCV Mat 类型及对应编号如下表:
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 |
CV_16F | 7 | 15 | 23 | 31 |
其中经常使用的是CV_8UC(n)与CV_32FC(n),其中8U为Unsigned 8bits uchar 0~255,32F为Float 32bits float 3.4E38~3.4E38(Mat常用区间为0.0f~1.0f)。
OpenCV 进行Mat数据类型转换时采用converTo函数
void cv::Mat::convertTo(OutputArray m, int rtype, double alpha = 1, double beta = 0);
其中alpha为缩放比例因子,默认为1,即在使用converTo进行数据类型转换时,数据值不会改变,所以需加特定alpha值进行转换,即:
cv::Mat img_8u, img_32f;
***your code***
img_8u.convertTo(img_32f, CV_32F, 1/255.0); // 8U转32F
img_32f.convertTo(img_8u, CV_8U, 255.0); // 32F转8U