给我一个给人脸戴口罩的代码
时间: 2024-06-10 15:05:54 浏览: 22
以下是一个简单的 Python 代码,在图像中给人脸戴上口罩:
```
import cv2
# 加载人脸和口罩的图像
face_img = cv2.imread("path/to/face/image.jpg")
mask_img = cv2.imread("path/to/mask/image.png")
# 创建一个 Haar Cascade 分类器,用于检测人脸
face_cascade = cv2.CascadeClassifier('path/to/haarcascade_frontalface_default.xml')
# 将图像转换为灰度图像,以便使用分类器检测人脸
gray = cv2.cvtColor(face_img, cv2.COLOR_BGR2GRAY)
# 使用分类器检测人脸
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 在每个检测到的人脸上戴上口罩
for (x,y,w,h) in faces:
# 调整口罩的大小和位置,使其覆盖住嘴巴和鼻子
mask_resized = cv2.resize(mask_img, (w, int(h/2)))
mask_roi = face_img[y+h//2:y+h//2+mask_resized.shape[0], x:x+w]
# 将口罩与人脸合并
mask_gray = cv2.cvtColor(mask_resized, cv2.COLOR_BGR2GRAY)
_, mask_thresh = cv2.threshold(mask_gray, 50, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask_thresh)
mask = cv2.bitwise_and(mask_resized, mask_resized, mask=mask_thresh)
mask_bg = cv2.bitwise_and(mask_roi, mask_roi, mask=mask_inv)
mask_fg = cv2.add(mask, mask_bg)
face_img[y+h//2:y+h//2+mask_resized.shape[0], x:x+w] = mask_fg
# 显示结果
cv2.imshow("Result", face_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
你可以将 `path/to/face/image.jpg` 替换为你需要处理的图像路径,将 `path/to/mask/image.png` 替换为一个 PNG 格式的口罩图像路径。请注意,此代码假定图像中只有一张人脸。如果有多张人脸,你需要对每张脸分别戴上口罩。