python - 如何将 OpenCV 图像与颜色进行比较

标签 python numpy opencv image-processing

问题比较简单。

我有一张图片,我知道图片的背景颜色。假设我想创建图像的前景蒙版。

我试过这个:

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/

相关文章:

python - 快速、干净地查找 Numpy 数组索引的方法

python - 防止 Paramiko 退出

python - 如何打印字符之间有一点延迟的字符串?

python - 如何将数组替换为numpy数组python的对角线

python - 使用 python 绘制数千个文件

python - 试图根据一列中的值屏蔽 2D numpy 数组

python - 如何使用numpy调整图像数据的大小?

c++ - 如何使用 SIFT 特征/描述符作为 SVM 训练的输入?

c++ - OpenCV图像变换和透视变化

python - OpenCV:获取像素的 L a b 值