OpenCV 如何遮罩图像
我们可以通过计算掩罩和图像之间的cv2.bitwise_and()来将掩罩应用于图像。要跟踪颜色,我们在HSV颜色空间中使用cv2.inRange()定义一个掩罩,传递HSV中颜色值的下限和上限。
也可阅读:使用Python和OpenCV对图像进行颜色识别
要跟踪图像的一部分,我们可以使用np.zeros()来定义一个掩码,并使用白色(255)对输入图像中要检查的区域进行切片。按照给定的步骤进行图像遮罩-
- 第一步是导入所需的库。所需的Python库是OpenCV和NumPy。确保你已经安装了它们。
-
然后使用cv2.imread()方法读取输入图像。将图像从BGR转换为HSV以在输入图像中跟踪颜色。要跟踪图像的一部分,保持图像在BGR格式。
-
使用cv2.inRange()定义一个掩码来跟踪图像中的特定颜色。在HSV格式中传递颜色的下限和上限。如果要跟踪输入图像的矩形部分,请使用矩形图像(mask )和cv2.zeros()。将掩码的条目填充为255,以跟踪原始图像中的区域。
-
使用cv2.bitwise_and()将mask 和输入图像之间的位与操作。
-
现在显示掩码和遮罩图像。
我们将使用此图像作为以下示例的输入文件 –
示例
在此Python程序中,我们创建一个颜色掩码来跟踪输入图像中的黄色。在此示例中,我们使用HSV颜色空间获取颜色掩码。
# import required libraries
import cv2
import numpy as np
# read input image
img = cv2.imread('car.jpg')
# Convert BGR to HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# define range of blue color in HSV
lower_yellow = np.array([15,50,180])
upper_yellow = np.array([40,255,255])
# Create a mask. Threshold the HSV image to get only yellow colors
mask = cv2.inRange(hsv, lower_yellow, upper_yellow)
# Bitwise-AND mask and original image
result = cv2.bitwise_and(img,img, mask= mask)
# display the mask and masked image
cv2.imshow('Mask',mask)
cv2.waitKey(0)
cv2.imshow('Masked Image',result)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出
当我们运行以上代码时,会打开两个名为 ‘Mask ‘和’Masked Image ‘的窗口。’Mask ‘显示用于跟踪黄色的遮罩。’Masked Image ‘在输入图像中显示跟踪到的黄色。
示例
在这个Python程序中,我们创建一个矩形区域作为遮罩。我们想要跟踪输入图像中的这个矩形部分。
# import required libraries
import cv2
import numpy as np
# Read an input image as a gray image
img = cv2.imread('car.jpg')
# create a mask
mask = np.zeros(img.shape[:2], np.uint8)
mask[100:250, 150:450] = 255
# compute the bitwise AND using the mask
masked_img = cv2.bitwise_and(img,img,mask = mask)
# display the mask, and the output image
cv2.imshow('Mask',mask)
cv2.waitKey(0)
cv2.imshow('Masked Image',masked_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出
当我们运行以上代码时,会打开两个名为’遮罩 ‘和’遮罩图像 ‘的窗口。’遮罩 ‘显示遮罩(矩形区域)。’遮罩图像 ‘显示输入图像中的跟踪部分。