【发布时间】:2021-05-16 14:32:33
【问题描述】:
我想查找 3D numpy 数组是否包含沿第 3 维的特定 1D 向量。 (我需要检查图像是否包含特定颜色的像素。)
当且仅当任何像素与目标完全匹配时,我才需要返回 true。
我尝试了以下方法:
import numpy as np
target = np.array([255, 0, 0])
search_area = np.array([[[0,0,0],[1,1,1],[2,2,2]],
[[3,3,3],[4,4,4],[5,5,5]],
[[6,6,6],[7,7,7],[8,8,255]]])
contains_target = np.isin(target, search_area).all(): # Returns True
返回 True,因为每个元素都可以在整个数组中的某个位置单独找到。
接下来我尝试了:
target = np.array([255, 0, 0])
search_area = np.array([[[0,0,0],[1,1,1],[2,2,2]],
[[3,3,3],[4,4,4],[5,5,5]],
[[6,6,6],[7,7,7],[8,0,255]]])
contains_target = (target == search.all(2)).any() # Returns True
这效果更好,因为它单独匹配每个像素的目标元素,但当它们没有按顺序或数字不正确时,它仍然返回 True。
最后,我试过了:
def pixel_matches_target(self, pixel_to_match):
return (target == pixel_to_match).all()
contains_target = np.apply_along_axis(self.pixel_matches_target, 2, search_area).any()
但是使用起来太慢了(每次大约需要 1 秒)。
如何查找 numpy 数组是否包含沿特定轴的向量?
编辑:
我最终通过使用 cv2.inRange() 将 RGB 图像转换为二进制掩码并检查生成的 2D 数组是否包含 True 值来规避该问题。这导致执行速度提高了几个数量级。
【问题讨论】:
标签: python arrays python-3.x numpy multidimensional-array