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

标签 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

解决这个问题的最佳方法是什么?我确信有比上面所示的简单方法更好的方法。

最佳答案

一种 NumPythonic 方法是使用 .any沿着最后一个轴,即 .any(axis=-1) 或简单地 .any(-1),然后使用 np.argwhere获取相应的有效索引,就像这样 -

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

请注意,indices 将是一个 NumPy 数组。

关于python - NumPy:第三维非零的索引(图像掩蔽),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35954419/

相关文章:

python - 如何以适当的分隔将表达式存储在列表中?

python - 将图像分割成任意数量的框

python - numpy.longdouble dtype 的 timedelta 错误

python - 如何将 pandas DataFrame 中的列取消嵌套(分解)为多行

python - cv2.triangulatePoints 是不是很准确?

python - Numpy:从给定范围生成组合的有效方法

python - "Expanding Mode"类似于 Pandas "expanding_mean"

python - 优化使用 numpy 创建 3d 矩阵

python - 关于管理完善工作流程的日志

python - 如何使 conda 虚拟环境持久化并可用于 Jupyter Notebook 等工具?