0

作为 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 存储库中提到的代码的链接。

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

plt.imshow(s)
plt.show()
4

2 回答 2

1

不会只做这个工作吗?

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

解释

plt.imshow期望具有 shape 的二维数组(x, y),并将其视为灰度,或维度(x, y, 3)(视为 RGB)或(x, y, 4)(视为 RGBA)。您拥有的数组是(x, y, 1). 为了摆脱最后一个维度,我们可以使用 Numpy 索引来删除最后一个维度。s[..., 0]说,“按原样获取所有其他维度,但沿着最后一个维度,获取索引 0 处的切片”。

于 2018-01-03T10:02:07.127 回答
0

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

plt.imshow(np.squeeze(s))
于 2018-01-03T10:03:03.017 回答