我正在尝试使用 NumPy 获取与特定颜色不同的图像像素列表。
例如,在处理以下图像时:
我设法使用以下方法获得了所有黑色像素的列表:
np.where(np.all(mask == [0,0,0], axis=-1))
但是当我尝试这样做时:
np.where(np.all(mask != [0,0,0], axis=-1))
我得到一个很奇怪的结果:
看起来 NumPy 只返回了 R、G 和 B 非 0 的索引
这是我正在尝试做的一个最小示例:
import numpy as np
import cv2
# Read mask
mask = cv2.imread("path/to/img")
excluded_color = [0,0,0]
# Try to get indices of pixel with different colors
indices_list = np.where(np.all(mask != excluded_color, axis=-1))
# For some reason, the list doesn't contain all different colors
print("excluded indices are", indices_list)
# Visualization
mask[indices_list] = [255,255,255]
cv2.imshow(mask)
cv2.waitKey(0)
原文由 ofir dubi 发布,翻译遵循 CC BY-SA 4.0 许可协议
对于选择除黑色像素以外的所有像素的第二种情况,您应该使用
np.any
而不是np.all
:或者简单地通过
~
反转布尔数组来获得黑色像素的补充:工作示例:
如果有人使用 matplotlib 绘制结果并得到完全黑色的图像或警告,请参阅这篇文章: 将所有非黑色像素转换为一种颜色不会产生预期的输出