Python 将RGB图像阵列乘以标量后使用plt.imshow获取黑色绘图

Python 将RGB图像阵列乘以标量后使用plt.imshow获取黑色绘图,python,matplotlib,rgb,imshow,Python,Matplotlib,Rgb,Imshow,所以我有点困惑为什么会这样 我有一个二进制图像: 现在我想将这个二值图像转换成RGB空间,因此我使用dstack函数连接第三个轴 到目前为止,一切正常,但现在我必须将out\u图像数组乘以255,以在RGB空间中反射白色,这就是问题所在,所有图像都变为黑色 但是如果我再画一张随机图像,一切都很好,所以这里发生的事情,我也使用了cmap,但不管我使用什么类型的cmap,当乘以255 有什么想法吗?问题的解决方案是不要将数组乘以255 另一个选项是将映像的数据类型减少为unsigned int8

所以我有点困惑为什么会这样

我有一个二进制图像:

现在我想将这个二值图像转换成RGB空间,因此我使用
dstack
函数连接第三个轴

到目前为止,一切正常,但现在我必须将
out\u图像
数组乘以
255
,以在RGB空间中反射白色,这就是问题所在,所有图像都变为黑色

但是如果我再画一张随机图像,一切都很好,所以这里发生的事情,我也使用了
cmap
,但不管我使用什么类型的
cmap
,当乘以
255


有什么想法吗?

问题的解决方案是不要将数组乘以
255

另一个选项是将映像的数据类型减少为unsigned int8,
out\u image=out\u image.astype(np.uint8)

让我解释一下原因:

单通道映像可以具有任意值和数据类型。颜色将由要使用的颜色贴图决定,如果需要,将标准化到特定范围

相比之下,
imshow
假设3通道RGB阵列在两个范围内,
[0,1.]
[0255]
。(“三维数组必须是数据类型无符号字节、无符号短、浮点32或浮点64”)。
要使用的范围将由阵列的数据类型选择:

  • 浮点数组应在
    [0,1.]
    范围内
  • 整数数组应在
    [0255]
    范围内。还要注意,整数数组的数据类型必须是int8,而不是int32
  • 正如在RGB案例中可以看到的,范围
    [0,1]
    中的整数数组保持黑色,范围
    [0,255.]
    中的浮点数组保持黑色。当我对RGB图像使用
    plt.imshow(…)
    时,我在每个RGB通道中使用了介于0和1之间的浮点值。事实上,当我不这样做的时候,它给了我错误。在你的第二张图像中,它似乎是这样绘制的,黑白从0到1。如果你调整其他通道中的一个,我想你会看到其他颜色。所以,他们的问题归结到是否需要将其映射到8位整数。您的意思是
    as.type(numpy.uint8)
    ?因为将其转换为
    int8
    对我来说不起作用