出发点:看了很多有关旋转人脸的,多为使用c语言实现的,结合前辈思想使用python实现了一版。
注意:本人使用的是jupyter notebook边写边检查, 所以使用IDE的童鞋记得将我函数定义代码和测试代码分开,测试代码放到
“if __name__=='__main__'”中,可以规范点。
流程为:
1.获得人脸特征点
2.获得左右眼角
3.计算左右眼角坐标差值dx,dy然后求artan值转换为弧度angle
4.选定鼻尖为人脸中心center
5.创建旋转矩阵
6.warpAffine旋转图片
import cv2
import dlib
import numpy as np
import math
shape_path = './shape_predictor_68_face_landmarks.dat' # 特征检测器模型路径
img = cv2.imread('./test/test.jpg') # 测试图片
detector = dlib.get_frontal_face_detector() # 人脸检测器
predictor = dlib.shape_predictor(shape_path) # 人脸特征检测器
# 用来取得特征点集合
def getRes(img):
# 在这里需要将BGR格式颜色通道转为RGB,因为dlib默认使用RGB图片
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
res = detector(img, 1) # 检测结果
for idx,face in enumerate(res): # 遍历检测结果中的人脸
shape =