NumPy:第三维非零的索引(图像掩蔽)

时间:2016-03-12 06:10:52

标签: python numpy

总结:我正在寻找像'numpy.nonzero'这样的东西,但有一点扭曲。我想搜索包含第三维中非零的任何元素的所有索引。如果存在任何元素,请给我该维度的索引。

详细信息:我的项目涉及接收,解析,然后输出修改后的图像文件。它首先将图像转换为3D numpy数组。使用该文件创建一个掩码。接下来,它使用'numpy.bitwise_and'来查找掩码的位模式与源图像重叠的位置,然后根据这些索引执行操作。

mask = create_mask(self.image) # spare array, same size as self.image
overlap = np.bitwise_and(self.image, mask)

indices = []
for y, row in enumerate(overlap):
    for x, col in enumerate(row):
        if any(col): # any RGB values are not 0
            indices.append((y,x))

for (y, x) in indices:
     pass # do stuff

解决此问题的最佳方法是什么?我确信这比上面显示的天真方法更好。

1 个答案:

答案 0 :(得分:1)

一种NumPythonic方式是在最后一个轴上使用.any,即.any(axis=-1)或简单.any(-1),然后使用np.argwhere获取相应的有效索引,如下所示 -

indices = np.argwhere(overlap.any(-1))

请注意,indices将是NumPy数组。