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 型取值范围。

本文对您有帮助的话,请点赞支持一下吧,谢谢!

关注我 宁萌Julie,互相学习,多多交流呀!

参考

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

  • 41
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值