基于dlib的人脸加贴纸代码
时间: 2023-12-15 18:04:25 浏览: 27
以下是基于dlib的人脸加贴纸代码示例:
```python
import dlib
import cv2
# 加载人脸检测器和关键点检测器
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
# 加载贴纸图片并进行缩放
sticker = cv2.imread('sticker.png', cv2.IMREAD_UNCHANGED)
sticker = cv2.resize(sticker, (100, 100))
# 加载输入图片
img = cv2.imread('input.jpg')
# 将图片转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 使用人脸检测器检测人脸
faces = detector(gray)
# 遍历每个检测到的人脸
for face in faces:
# 使用关键点检测器检测人脸关键点
landmarks = predictor(gray, face)
# 获取左眼和右眼的中心坐标
left_eye = (landmarks.part(36).x + landmarks.part(39).x) // 2, (landmarks.part(36).y + landmarks.part(39).y) // 2
right_eye = (landmarks.part(42).x + landmarks.part(45).x) // 2, (landmarks.part(42).y + landmarks.part(45).y) // 2
# 计算贴纸应该放置的位置
x = left_eye[0] - 50
y = left_eye[1] - 50
# 如果贴纸会超出图片范围,则调整位置
if x < 0:
x = 0
if y < 0:
y = 0
if x + 100 > img.shape[1]:
x = img.shape[1] - 100
if y + 100 > img.shape[0]:
y = img.shape[0] - 100
# 获取贴纸的 alpha 通道
sticker_alpha = sticker[:, :, 3] / 255.0
# 将贴纸加到输入图片上
for c in range(3):
img[y:y + 100, x:x + 100, c] = sticker[:, :, c] * sticker_alpha + img[y:y + 100, x:x + 100, c] * (1 - sticker_alpha)
# 显示结果图片
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个示例中,我们使用了dlib库中的人脸检测器和关键点检测器来检测人脸和关键点,并将贴纸图片加到了人脸上。具体步骤如下:
1. 加载人脸检测器和关键点检测器。
2. 加载贴纸图片并进行缩放。
3. 加载输入图片并将其转换为灰度图。
4. 使用人脸检测器检测人脸。
5. 遍历每个检测到的人脸,使用关键点检测器检测人脸关键点。
6. 计算贴纸应该放置的位置。
7. 获取贴纸的 alpha 通道,将贴纸加到输入图片上。
8. 显示结果图片。
需要注意的是,这个示例中使用的贴纸图片需要有 alpha 通道,用于控制贴纸的透明度。