在将RGB图像阵列乘以标量后,使用plt.imshow获得黑色图

问题描述 投票:8回答:1

所以我对为什么会这样感到困惑。

我有一个二进制图像:enter image description here

现在我想将此二进制图像转换为RGB空间,因此我使用dstack函数来连接第3轴

enter image description here

到目前为止一切正常,但是现在我必须将out_image数组乘以255才能在RGB空间中反射白色,这就是问题所在,一切都变成黑色enter image description here

但是如果我绘制另一个随机图像,那么一切都很好,所以这里发生了什么,我也玩过cmap,但是无论我使用哪种cmap,在相乘时它总是变成黑色。由255

有什么想法吗?

python matplotlib rgb imshow
1个回答
12
投票

该问题的解决方案是不要将数组乘以255另一个选择是将映像的数据类型减小为unsigned int8,out_image = out_image.astype(np.uint8)

让我解释一下原因:

单个通道图像可以具有任意值和数据类型。颜色将由要使用的颜色图确定,如果需要,可以将其归一化到特定范围。

enter image description here

相反,imshow假定3通道RGB阵列处于[0., 1.][0,255]两个范围内。 (“三维数组必须是dtype无符号字节,无符号short,float32或float64”)。将使用的范围由数组的数据类型选择:

  1. A float数组应在[0., 1.]范围内,
  2. 一个整数数组应在[0,255]范围内。还请注意,整数数组必须为int8数据类型,而不是int32。

enter image description here

在RGB情况下可以看到,范围为[0,1]的整数数组保持黑色,以及范围为[0., 255.]的浮点数组。

© www.soinside.com 2019 - 2024. All rights reserved.