如何转换已加载ImageIO的Numpy数组的第3维

时间:2019-05-08 11:41:45

标签: python numpy numpy-ndarray

我使用(128,128,3)从PNG加载了一个形状为ImageIO的numpy数组。

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

我想摆脱三维空间,并用一个1D数组替换它,其中0表示黑色,1表示白色。因此,最终结果形状应为(128,128,1)

我尝试使用numpy.reshapenumpy.transpose的组合,但是我真的很努力地了解如何做到这一点。我是numpy和Python的初学者,所以我可能缺少一些非常简单的内容。

1 个答案:

答案 0 :(得分:2)

它并不缺少,而且非常简单。只需索引您想要的频道:

im[:, :, 0]

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

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

或将255设置为一个:

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

创建布尔数组的更高级方法是将基础数据视为布尔值。仅当输入为uint8时,这才可以很好地工作:

im[:, :, 0].view(dtype=np.bool)

最后,要为N维数组的最后一个维建立索引,可以使用省略号:

 im[..., 0]
索引中的

...(或实际名称Ellipsis)表示“对所有未明确列出的尺寸使用:”。您可以在索引中最多使用一次。

通常,您将需要阅读indexing上的文档,然后再阅读broadcasting上的文档。那里有较温和的介绍,但是numpy文档非常全面,从马的嘴里就可以直接听到。