获取numpy数组的尺寸以绘制转换的灰度图像

时间:2018-01-03 09:27:44

标签: image numpy unity3d matplotlib

作为Unity ML代理的一部分,提供给强化学习代理的图像可以转换为灰度,如下所示:

def _process_pixels(image_bytes=None, bw=False):
    s = bytearray(image_bytes)
    image = Image.open(io.BytesIO(s))
    s = np.array(image) / 255.0
    if bw:
        s = np.mean(s, axis=2)
        s = np.reshape(s, [s.shape[0], s.shape[1], 1])
    return s

由于我对Python并不熟悉,尤其是numpy,我如何才能获得正确绘制重新形成的numpy数组的尺寸?根据我的理解,形状基于图像的宽度,高度和通道数量。因此,在重新整形后,只有一个通道可以确定灰度值。我还没有找到一种方法来绘制它。

以下是Unity ML Agents repository提及的代码的链接。

这就是我想要绘制它的方式:

plt.imshow(s)
plt.show()

2 个答案:

答案 0 :(得分:1)

不仅仅是做这项工作吗?

plt.imshow(s[..., 0])
plt.show()

解释

plt.imshow要求形状为(x, y)的二维数组,并将其视为灰度,或尺寸(x, y, 3)(视为RGB)或(x, y, 4)(视为RGBA)。你拥有的数组是(x, y, 1)。为了摆脱最后一个维度,我们可以进行Numpy索引以删除最后一个维度。 s[..., 0]说,"按原样取所有其他维度,但沿最后一个维度,在索引0和#34;处获取切片。

答案 1 :(得分:0)

看起来灰度版本在最后有一个额外的单个维度。要绘图,你只需要折叠它,例如与np.squeeze

<MachineName>\IIS_IUSRS