如何在OpenCV图像对应的Numpy 3D数组中按条件查找位置
解决Numpy 3D数组按多条件筛选位置的问题
实现步骤
利用Numpy的向量化运算和布尔索引即可高效完成,无需手动循环遍历:
- 导入依赖并定义数组
先将示例列表转换为标准Numpy数组:
import numpy as np array1 = np.array([[[186, 123, 231], [184, 126, 76]], [[224, 187, 97], [187, 145, 243]]]) array2 = np.array([150, 180, 250])
- 生成条件掩码
分别对每个通道的条件进行判断,再取逻辑与得到同时满足所有条件的位置掩码:
# 逐个通道判断条件 cond_0 = array1[..., 0] > array2[0] # 第一个元素大于array2对应值 cond_1 = array1[..., 1] < array2[1] # 第二个元素小于array2对应值 cond_2 = array1[..., 2] < array2[2] # 第三个元素小于array2对应值 # 三个条件需同时满足 mask = cond_0 & cond_1 & cond_2
- 提取目标位置
使用np.where获取掩码中True对应的行、列索引,再合并为二维数组格式:
rows, cols = np.where(mask) result = np.column_stack((rows, cols))
结果验证
运行代码后,result的输出为:
array([[0, 0], [0, 1], [1, 1]])
与预期完全一致。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

