OpenCV 32F 与 8U Mat数据类型相互转换(C++版)

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

你可能感兴趣的:(opencv,人工智能,计算机视觉,c++)