opencv 数据转换
前言:
在使用opencv库的各种算法的时候,总是需要将各种数据类型进行相互转换,以便同样的数据值可是使用于不同的算法,或者将中间矩阵结果可视化出来,这个时候数据间的转换就特别重要了。
此篇随笔记录部分的数据转换方式及部分细节,方便自己和需要的同学查看。
1、数据类型转换
converTo()函数用于相同通道的数据类型转换,测试代码用例如下:
1 Mat src(1,1,CV_32F,Scalar(20.45)); 2 Mat output; 3 src.convertTo(output,CV_8U); 4 cout<<"src data"<<src<<endl; 5 cout<<"output data"<<output<<endl;
相关细节:
1)、如果16位整形8位转整形并且数值超过的整形的范围:转出的整形会取整形范围的最大值,8U为255,8S为127。
2)、如果有符号负数转无符号数据类型:转出整形会变为0。
3)、如果浮点数据类型转整形:整形数据范围内就去掉小数点的值,超出范围参照1、 2条。
4)、相同多通道的数据相转换数据类型也符合上面的规则。
2、图像格式类型转换
cvtColor()函数用于图像格式的转换(并不能用于数据类型的转换),例如彩色转灰度,YUV转RGB等,函数用例如下
1 cvtColor(img1,img2,COLOR_RGB2GRAY);
注意细节:
1)、什么样的图像格式而已相互转换:Ctrl+鼠标左键点击“COLOR_RGB2GRAY”转到定义去查看
3、其他补充
32位浮点数据类型也可是imshow出图像信息,请将数据归一化到0-1之间。
声明变量时没有指定数据类型和大小,依然可以获得转换结果。
normalize()函数也可以进行数据的归一处理,转到头文件下,函数有比较详细的介绍。

浙公网安备 33010602011771号