获取 numpy 数组的维度以绘制转换后的灰度图像
Getting the dimensions of a numpy array right to plot converted greyscale image
作为 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 提到的代码 Unity ML Agents repository。
这就是我想要绘制它的方式:
plt.imshow(s)
plt.show()
不只是做这个工作吗?
plt.imshow(s[..., 0])
plt.show()
说明
plt.imshow
需要一个形状为 (x, y)
的二维数组,并将其视为灰度,或者尺寸 (x, y, 3)
(像 RGB 一样处理)或 (x, y, 4)
(处理为 RGBA)。您拥有的数组是 (x, y, 1)
。要删除最后一个维度,我们可以使用 Numpy 索引来删除最后一个维度。 s[..., 0]
说,"take all other dimensions as-is, but along the last dimension, get the slice at index 0".
灰度版最后好像多了一个维度。要绘制,您只需要折叠它,例如np.squeeze
:
plt.imshow(np.squeeze(s))
作为 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 提到的代码 Unity ML Agents repository。
这就是我想要绘制它的方式:
plt.imshow(s)
plt.show()
不只是做这个工作吗?
plt.imshow(s[..., 0])
plt.show()
说明
plt.imshow
需要一个形状为 (x, y)
的二维数组,并将其视为灰度,或者尺寸 (x, y, 3)
(像 RGB 一样处理)或 (x, y, 4)
(处理为 RGBA)。您拥有的数组是 (x, y, 1)
。要删除最后一个维度,我们可以使用 Numpy 索引来删除最后一个维度。 s[..., 0]
说,"take all other dimensions as-is, but along the last dimension, get the slice at index 0".
灰度版最后好像多了一个维度。要绘制,您只需要折叠它,例如np.squeeze
:
plt.imshow(np.squeeze(s))