通过dlib获取人脸关键点后怎样截取眼睛和嘴巴
时间: 2024-02-15 10:03:53 浏览: 109
获取人脸关键点后,可以使用以下步骤截取眼睛和嘴巴:
1. 根据dlib获取的人脸关键点,确定眼睛和嘴巴的位置。眼睛通常位于人脸关键点中的第37到42个点和第43到48个点,而嘴巴通常位于第49到68个点。
2. 根据确定的位置,计算出眼睛和嘴巴的边界框。可以使用numpy的min和max函数来计算坐标的最小值和最大值。
3. 从原始图像中截取眼睛和嘴巴的图像。可以使用OpenCV的cv2.rectangle和cv2.crop函数来实现。
以下是示例代码:
```
import dlib
import cv2
import numpy as np
# 加载dlib预训练模型
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
# 加载图像
img = cv2.imread("test.jpg")
# 检测人脸
faces = detector(img, 1)
# 遍历每个人脸
for face in faces:
# 获取人脸关键点
landmarks = predictor(img, face)
landmarks = np.array([[p.x, p.y] for p in landmarks.parts()])
# 确定眼睛和嘴巴的位置
left_eye = landmarks[36:42]
right_eye = landmarks[42:48]
mouth = landmarks[48:68]
# 计算眼睛和嘴巴的边界框
left_eye_box = np.array([np.min(left_eye, axis=0), np.max(left_eye, axis=0)])
right_eye_box = np.array([np.min(right_eye, axis=0), np.max(right_eye, axis=0)])
mouth_box = np.array([np.min(mouth, axis=0), np.max(mouth, axis=0)])
# 截取眼睛和嘴巴的图像
left_eye_img = img[left_eye_box[0][1]:left_eye_box[1][1], left_eye_box[0][0]:left_eye_box[1][0]]
right_eye_img = img[right_eye_box[0][1]:right_eye_box[1][1], right_eye_box[0][0]:right_eye_box[1][0]]
mouth_img = img[mouth_box[0][1]:mouth_box[1][1], mouth_box[0][0]:mouth_box[1][0]]
# 显示截取后的图像
cv2.imshow("Left Eye", left_eye_img)
cv2.imshow("Right Eye", right_eye_img)
cv2.imshow("Mouth", mouth_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文