如何转换加载有 ImageIO 的 Numpy 数组的第三维

How to transform 3rd dimension of Numpy array loaded with ImageIO

我使用 ImageIO.

从 PNG 加载了一个形状为 (128,128,3) 的 numpy 数组

维度 3 似乎代表 RGB 值。在这种情况下,维度 3 的所有值都是 [255,255,255][0,0,0](即白色或黑色)。

我想去掉第三维并将其替换为单个一维数组,其中包含 0 表示黑色,1 表示白色。所以最终结果的形状应该是 (128,128,1).

我曾尝试使用 numpy.reshapenumpy.transpose 的组合,但我真的很难理解如何做到这一点。我是 numpy 和 Python 的初学者,所以我可能遗漏了一些非常简单的东西。

不缺,而且很简单。只需索引您想要的频道:

im[:, :, 0]

要转换为 0 和 1,您可以创建一个布尔数组:

im[:, :, 0].astype(np.bool)

或将 255 设为一:

im = im[:, :, 0]
im[im > 0] = 1

创建布尔数组的更高级方法是将基础数据视为布尔值。如果输入是 uint8:

,这只会开箱即用
im[:, :, 0].view(dtype=np.bool)

最后,要对N维数组的最后一维进行索引,可以使用省略号:

 im[..., 0]

...(或实际名称Ellipsis)在索引中表示"use : for all dimensions not listed explicitly."您最多可以在索引中使用一次。

一般来说,您需要阅读 indexing and later on broadcasting 上的文档。那里有更温和的介绍,但是 numpy 文档非常全面并且直接来自马口。