Python 如果列表中未找到红色通道,则替换所有像素

Python 如果列表中未找到红色通道,则替换所有像素,python,numpy,Python,Numpy,我有一个彩色图像和一个numPy值的遮罩,定义如下: img = cv2.imread(path) mask = [13 16 17 23 24 25 29 30 31 100] 现在,如果彩色图像的红色通道值不在遮罩中,我想将所有像素更改为0或黑色。我可以做一个循环,但我想用一种简单的方式。这可能吗?您可以使用np.isin进行检查 img = cv2.imread(path) mask = np.array([13, 16, 17, 23, 24, 25, 29, 30, 31, 100]

我有一个彩色图像和一个numPy值的遮罩,定义如下:

img = cv2.imread(path)
mask = [13 16 17 23 24 25 29 30 31 100]

现在,如果彩色图像的红色通道值不在遮罩中,我想将所有像素更改为0或黑色。我可以做一个循环,但我想用一种简单的方式。这可能吗?

您可以使用
np.isin
进行检查

img = cv2.imread(path)
mask = np.array([13, 16, 17, 23, 24, 25, 29, 30, 31, 100])
reds = np.isin(img[:,:,2],mask)
OpenCV以bgr格式加载图像,这意味着红色是最后一个通道
np.isin
返回一个布尔形状数组(HxW),告诉您哪些红色像素在掩码中,哪些不在掩码中。然后,您可以简单地检查所有像素是否为真

if np.prod(reds):
    img[:]=0

您可以使用
np.isin
进行检查

img = cv2.imread(path)
mask = np.array([13, 16, 17, 23, 24, 25, 29, 30, 31, 100])
reds = np.isin(img[:,:,2],mask)
OpenCV以bgr格式加载图像,这意味着红色是最后一个通道
np.isin
返回一个布尔形状数组(HxW),告诉您哪些红色像素在掩码中,哪些不在掩码中。然后,您可以简单地检查所有像素是否为真

if np.prod(reds):
    img[:]=0

基本上,如果图像中的红色通道的值与遮罩中的值不同,则使整个图像变黑?基本上,如果图像中的红色通道的值与遮罩中的值不同,则使整个图像变黑?