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()函数也可以进行数据的归一处理,转到头文件下,函数有比较详细的介绍。

 

posted @ 2020-09-10 14:30  永驻的青春  阅读(573)  评论(0)    收藏  举报