何时出现错误提示 :”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]。