根据像素的颜色生成 RGB 图像的布尔掩码的最 pythonic 方法是什么?

What is the most pythonic way of generating a boolean mask of an RGB image based on the colour of the pixels?

我有一张图片有缺失部分,我知道它已被涂成绿色(第一张图片)。生成另一个 "boolean" 图像的最 pythonic 方法是什么,该图像对缺失部分显示白色,对非缺失部分显示黑色(第二张图像)?

是否可以不使用 for 循环而仅使用数组切片来实现?

我的图像是一个形状为 [height, width, 3] 的 numpy 数组。我希望以下代码分配一个二维布尔数组,显示每个像素的值是否为绿色([0, 255, 0])。

mask = image[:, :] == [0, 255, 0]

然而,它 returns 一个与图像 ([height, width, 3]) 形状相同的数组,显示像素的红色、绿色或蓝色值是 0、255 还是 0,分别。我可以在这里使用 any()all() 方法吗?

你的想法是正确的。要使用的东西是 numpy 的 alltrue:

mask = np.alltrue(image == [0, 255, 0], axis=2)

想法是使用 np.zeros then color pixels white where the input image pixels are green with np.where 创建一个空白蒙版。生成的掩码应为 ndarray.

类型
import cv2
import numpy as np

# Load image, create blank black mask, and color mask pixels 
# white where input image pixels are green
image = cv2.imread('1.png')
mask = np.zeros(image.shape, dtype=np.uint8)
mask[np.where((image == [0,255,0]).all(axis=2))] = [255,255,255]

cv2.imshow('mask', mask)
cv2.waitKey()