Python中”Clipping input data to the valid range for imshow with RGB data ”的问题解决

Posted 宁萌Julie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中”Clipping input data to the valid range for imshow with RGB data ”的问题解决相关的知识,希望对你有一定的参考价值。

何时出现错误提示 :”Clipping input data to the valid range for imshow with RGB data ([0…1] for floats or [0…255] for integers)”?

在Python中,使用 matplotlib 的函数:plt.imshow(ndarray) 将输入数组显示为彩色 ( RGB ) 图像时。

而且,只在处理彩色图像时出现错误提示,显示为空白图像;处理灰度图像时函数运行正常、显示图像。

原因

plt.imshow() 函数设置:

  • 对于二维数组(灰度图像),函数会自动将输入数据归一化变换至[0,1],然后显示。

  • 对于三维数组(彩色图像),plt.imshow() 函数并不会自动对输入数据归一化处理,而是对数据取值范围提出要求:如果是float型数据,取值范围应在[0,1];如果是int型数据,取值范围应在[0,255]。

我遇到的情况是:在之前的数据处理步骤有一些矩阵运算,数据类型变为 float64 型。输入二维数组(显示为灰度图像)时,因为函数会进行归一化处理,不受影响。输入三维数组(显示为彩色图像)时,就需要先转换到相应的数据类型和取值范围,才能在 plt.imshow() 函数中正常显示。

解决方法

方法一:plt.imshow(ndarray.astype(‘uint8’))

将 float 型数据截短转换成 uint8 型数据。

方法二:plt.imshow(ndarray/255)

将数据缩放到[0,1]。

但是,我在学习一个NumPy例子时(先对数据做奇异值分解( SVD ),再还原图像,用 plt.imshow() 显示),发现还原后有一小部分 ndarray 数据有负值,因此缩放后数据的取值区间是[-1,1],使用 plt.imshow() 函数时仍然会显示上述错误提示。但是此时图像可以显示,可能是因为负值点只占极少数?所以我推荐方法一,可以保证输入数组符合 uint 型取值范围。

参考

1.对方法一的介绍:https://blog.csdn.net/shizheng_Li/article/details/116492692

2.介绍方法一及问题分析:https://stackoverflow.com/questions/49643907/clipping-input-data-to-the-valid-range-for-imshow-with-rgb-data-0-1-for-floa

3.imshow函数介绍:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.imshow.html

4.对方法二的介绍:https://blog.csdn.net/aaon22357/article/details/82736792

以上是关于Python中”Clipping input data to the valid range for imshow with RGB data ”的问题解决的主要内容,如果未能解决你的问题,请参考以下文章

python中怎么重复打印

python中去除数组中inf

python中字典的问题

想象中的python,实际的python,希望的python

关于python中字典

python中= 和==的区别