opencv中,imshow显示浮点型图像时,浮点型图像的像素取值范围为什么是[0, 1]

opencv中使用imshow函数显示图像时,如果需要显示的是浮点型的图像,那么此时需要将浮点型图像的取值范围先映射到[0, 1],再使用imshow函数显示。

一、

在这里插入图片描述
1、当图像深度从小深度转换成大深度时,像素值没有发生变化,但是 显示范围 变了,
比如:像素值为128的CV_8UC1显示出来是灰色,深度变为CV_64FC1后,显示范围变为0~1,图像会显示为白色。
2、当图像深度从大深度转换成小深度时,超出小深度取值范围的像素值会发生变化,被限制在小深度范围内

二、

在这里插入图片描述

三、

将CV_8UC3转化为CV_32FC3的图片:src.convertTo(dst, CV_32FC3, 1 / 255.0);//其中dst为目标图, CV_32FC3为要转化的类型

第三个参数 1 / 255.0意义:

在整数CV_8U表示的颜色空间中,数值范围是0-255,但在浮点数表示的颜色空间中,数值范围是0-1.0(即如果要使用imshow显示浮点数图像时,必须先将浮点数图像的每个像素值映射到[0, 1]范围内才能正常显示),所以要把0-255归一化。
CV_8UC3的灰度或BGR图像的颜色分量都在0~255之间。直接使用imshow函数可以显示图像。 CV_32FC3取值范围为0~1.0,imshow的时候会把图像x255后再显示。imwrite不能保存浮点数类型的图片。

参考文献1:opencv4.1.0官方文档

参考文献2

参考文献3

参考文献4

猜你喜欢

转载自blog.csdn.net/weixin_45580017/article/details/129824229