if name == “jaw”:
由于下颌线是一个非封闭的面部区域,
只在 (x, y) 坐标之间画线
for l in range(1, len(pts)):
ptA = tuple(pts[l - 1])
ptB = tuple(pts[l])
cv2.line(overlay, ptA, ptB, colors[i], 2)
否则,计算人脸的凸包
地标坐标点并显示
else:
hull = cv2.convexHull(pts)
cv2.drawContours(overlay, [hull], -1, colors[i], -1)
遍历 FACIAL_LANDMARKS_IDXS 字典中的每个条目。
对于这些区域中的每一个,我们提取给定面部部分的索引并从形状 NumPy 数组中获取 (x, y) 坐标。
检查是否正在绘制下颌,如果是,只需循环各个点,绘制一条将下颌点连接在一起的线。
否则,处理计算点的凸包并在叠加层上绘制包。
最后一步是通过 cv2.addWeighted 函数创建透明叠加层:
应用透明覆盖
cv2.addWeighted(overlay, alpha, output, 1 - alpha, 0, output)
return the output image
return output
将visualize_facial_landmarks 应用于图像和关联的面部标记后,输出将类似于下图:
使用 dlib、OpenCV 和 Python 提取部分人脸
======================================================================================