在使用标量乘以图像数组后,使用plt.imshow获取黑色图

时间:2017-02-04 18:54:30

标签: python matplotlib

所以我对为什么会发生这种情况感到有些困惑。

我有二进制图片: enter image description here

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

enter image description here

到目前为止一切正常,但现在我必须将out_image数组乘以255以反映RGB空间中的白色,这就是问题发生的地方所有变为黑色enter image description here

但是如果我绘制另一张随机图像,一切都很好,所以这里发生的事情,我也玩过cmap,但无论我使用什么样的cmap它总是结果乘以255

时为黑色

有什么想法吗?

1 个答案:

答案 0 :(得分:9)

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

让我解释原因:

单通道图像可以具有任意值和数据类型。颜色将由要使用的色彩图确定,并且如果需要,则标准化为特定范围。

enter image description here

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

  1. float 数组应位于 [0., 1.] 范围内,
  2. 整数数组应在 [0,255] 范围内。另请注意,整数数组必须是数据类型int8而不是int32。
  3. enter image description here

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