python+opencv实现人脸添加墨镜特效
时间: 2023-10-02 20:03:26 浏览: 67
下面是一个简单的Python + OpenCV实现人脸添加墨镜特效的例子:
```python
import cv2
# 加载人脸分类器
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 加载墨镜图像
glasses = cv2.imread('glasses.png', -1)
# 打开摄像头
cap = cv2.VideoCapture(0)
while True:
# 读取摄像头帧
ret, frame = cap.read()
# 转换帧至灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 在每个检测到的人脸上添加墨镜
for (x, y, w, h) in faces:
# 调整墨镜尺寸以适应人脸大小
glasses_resized = cv2.resize(glasses, (w, int(h/2)))
# 计算墨镜的位置,并将其放入帧中
x_offset = x
y_offset = int(y + h/3)
x_end = x_offset + glasses_resized.shape[1]
y_end = y_offset + glasses_resized.shape[0]
# 检查墨镜是否超出帧的边界
if x_offset < 0 or y_offset < 0 or x_end > frame.shape[1] or y_end > frame.shape[0]:
continue
alpha_s = glasses_resized[:, :, 3] / 255.0
alpha_l = 1.0 - alpha_s
for c in range(0, 3):
frame[y_offset:y_end, x_offset:x_end, c] = (alpha_s * glasses_resized[:, :, c] + alpha_l * frame[y_offset:y_end, x_offset:x_end, c])
# 显示帧
cv2.imshow('frame', frame)
# 按下q键退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
```
这个例子中使用了OpenCV的人脸分类器来检测人脸,然后在每个检测到的人脸上添加墨镜。为了调整墨镜的大小以适应人脸,我们使用了OpenCV的 `resize()` 函数。在将墨镜加入帧中时,我们需要将其透明度考虑在内,以免墨镜覆盖了人脸。最后,我们使用OpenCV的`imshow()`函数显示帧,按下`q`键退出循环。