根据像素的颜色生成 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()
我有一张图片有缺失部分,我知道它已被涂成绿色(第一张图片)。生成另一个 "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()