- 使用numpy数组对OpenCV图像进行处理,可以更快地创建、修改和访问遮罩。
示例代码:
import cv2
import numpy as np
image = cv2.imread('image.jpg')
mask = np.zeros_like(image)
绘制多边形
pts = np.array([[50,50],[100,100],[50,100]])
cv2.fillPoly(mask, [pts], (255,255,255))
将遮罩应用于原图像
masked_image = cv2.bitwise_and(image, mask)
- 尽量避免使用循环遍历像素,可以使用OpenCV内置的函数快速进行操作,例如bitwise_and()函数实现位运算,可以快速对遮罩进行操作。
示例代码:
import cv2
import numpy as np
image = cv2.imread('image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret,mask = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY)
求遮罩反转
mask_inv = cv2.bitwise_not(mask)
将原图像和遮罩进行位运算
masked_image = cv2.bitwise_and(image, image, mask=mask)
将背景图像和遮罩的反转进行位运算
background = cv2.imread('background.jpg')
res = cv2.bitwise_and(background, background, mask=mask_inv)
将两个结果进行合并
final_image = cv2.add(masked_image, res)
- 在对彩色图像进行遮罩处理时,可以将图像从BGR格式转换为HSV格式进行处理,这样不仅可以提高遮罩的准确性,还可以提高处理的效率。
示例代码:
import cv2
import numpy as np
image = cv2.imread('image.jpg')
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
设置遮罩范围
lower_range = np.array([0,0,0])
upper_range = np.array([255,255,100])
创建遮罩
mask = cv2.inRange(hsv, lower_range, upper_range)
将遮罩应用于原图像
masked_image = cv2.bitwise_and(image, image, mask=mask)