应用matplotlib的imshow函数显示彩色图像(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]。

猜你喜欢

转载自blog.csdn.net/qq_39237205/article/details/124201647
今日推荐