如何将0-1范围float类型图像数组转换为0-255的int类型数组
图像数组类型转换后imshow显示异常解决方案
问题根因
你收到的报错提示Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).已经明确了imshow的输入校验规则,你的问题就是数据属性和规则不匹配:
- 当输入为浮点型数组时,imshow要求数值必须落在
[0, 1]区间 - 当输入为整型数组时,imshow才会接受
[0, 255]的数值范围
你执行photo*=255操作后,数组仍然是float类型,数值范围却变成了0~255,不符合浮点输入的校验规则,所以触发裁剪提示,第二个子图无法正常显示。
修复代码
你只需要在缩放数值后追加类型转换,将数组转为8位无符号整型即可,修正后的完整代码如下:
import matplotlib.pyplot as plt import numpy as np photo = plt.imread('Feynman.png') plt.figure() plt.subplot(121) plt.imshow(photo) # 核心修改:缩放后转换为uint8类型 photo = (photo * 255).astype(np.uint8) plt.subplot(122) plt.imshow(photo) plt.show()
额外说明
你原代码中的plt.figure漏写了括号,属于无效调用,补上括号才能正常创建画布实例。np.uint8刚好对应常规RGB图像的8位位深,转换后完全符合imshow的输入校验规则,不会再触发裁剪告警。
内容的提问来源于stack exchange,提问作者Ravin
相关产品推荐
相关产品推荐

