将 RGB 图像数组乘以标量后用 plt.imshow 得到黑色图
Getting black plots with plt.imshow after multiplying RGB image array by a scalar
所以我有点困惑为什么会这样。
我有一个二值图像:
现在我想将这个二值图像转换成 RGB space,所以我使用 dstack
函数连接第 3 个轴
到目前为止一切正常,但现在我必须将 out_image
数组乘以 255
以在 RGB space 中反映白色,这就是问题发生的地方黑色
但是如果我绘制另一个随机图像,一切都很好所以这里发生的事情,我也玩过 cmap
但不管是哪种 cmap
我总是使用它乘以 255
结果是黑色
有什么想法吗?
题中问题的解决方法是不将数组乘以255
。
另一种选择是将图像的数据类型减少为 unsigned int8,
out_image = out_image.astype(np.uint8)
让我解释一下原因:
单通道图像可以具有任意值和数据类型。颜色将由要使用的颜色图确定,并且如果需要,可以归一化到某个范围。
相比之下,imshow
假定 3 通道 RGB 数组在两个范围内,[0., 1.]
或 [0,255]
。 (“3 维数组必须是 dtype unsigned byte、unsigned short、float32 或 float64”)。
要使用的范围将由数组的数据类型选择:
- 一个float数组应该在
[0., 1.]
范围内,
- 一个整数数组应该在
[0,255]
范围内。另请注意,整数数组的数据类型必须是 int8 而不是 int32。
正如在 RGB 情况下所见,[0,1]
范围内的整数数组以及范围 [0., 255.]
.
中的浮点数组保持黑色
所以我有点困惑为什么会这样。
我有一个二值图像:
现在我想将这个二值图像转换成 RGB space,所以我使用 dstack
函数连接第 3 个轴
到目前为止一切正常,但现在我必须将 out_image
数组乘以 255
以在 RGB space 中反映白色,这就是问题发生的地方黑色
但是如果我绘制另一个随机图像,一切都很好所以这里发生的事情,我也玩过 cmap
但不管是哪种 cmap
我总是使用它乘以 255
有什么想法吗?
题中问题的解决方法是不将数组乘以255
。
另一种选择是将图像的数据类型减少为 unsigned int8,
out_image = out_image.astype(np.uint8)
让我解释一下原因:
单通道图像可以具有任意值和数据类型。颜色将由要使用的颜色图确定,并且如果需要,可以归一化到某个范围。
相比之下,imshow
假定 3 通道 RGB 数组在两个范围内,[0., 1.]
或 [0,255]
。 (“3 维数组必须是 dtype unsigned byte、unsigned short、float32 或 float64”)。
要使用的范围将由数组的数据类型选择:
- 一个float数组应该在
[0., 1.]
范围内, - 一个整数数组应该在
[0,255]
范围内。另请注意,整数数组的数据类型必须是 int8 而不是 int32。
正如在 RGB 情况下所见,[0,1]
范围内的整数数组以及范围 [0., 255.]
.