问题比较简单。
我有一张图片,我知道图片的背景颜色。假设我想创建图像的前景蒙版。
我试过这个:
background_color = np.array([255, 255, 255], dtype=np.uint8)
foreground = image != background_color
我期望的是一个形状为 HxWx1 的 bool 矩阵,颜色匹配时为 True,颜色不匹配时为 False。
但此操作比较的不是颜色,而是所有三个颜色分量,我得到 HxWx3 大小的矩阵,其中颜色分量匹配为 True,颜色分量不匹配为 False。
我用 for 循环创建了一个临时解决方案:
foreground = np.zeros(shape=(height, width, 1), dtype=np.bool)
for y in range(height):
for x in range(width):
if not np.array_equal(image[y, x], background_color):
foreground[y, x] = True
但是,当然,效果很慢。我的问题如下:是否有借助 numpy 或 OpenCV 方法进行此类比较的正确方法?
最佳答案
我不知道任何 numpy 函数,但你可以链接一个 np.any()
调用:
foreground = np.any(image != background_color, axis=-1)
前景
的形状将等于image.shape[:-1]
。如果你想要额外的维度,你可以使用:
foreground = np.any(image != background_color, axis=-1)[..., np.newaxis]
我觉得可能存在更好的(更像 numpy 的)方法来做到这一点......
关于python - 如何将 OpenCV 图像与颜色进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51939360/