【Dlib人脸特征提取 】2. 绘制人脸检测点

【 1. Dlib 绘制人脸特征点 】

在识别出人脸特征点之后,绘制对应的特征点能可视化特征效果。
Dlib本身提供了绘制特征点的方法,主要分为以下几步:

  • 使用image_window()新建图像窗口:
 win = dlib.image_window()
  • 指定窗口图片:
 win.clear_overlay()
 win.set_image(img)
  • 绘制面部轮廓:
 # 使用predictor来计算面部轮廓
 shape = predictor(img, faces[i])
 # 绘制面部轮廓
 win.add_overlay(shape)
  • 绘制人脸区域矩阵。
 # 绘制矩阵轮廓
 win.add_overlay(faces)

完整的代码示例如下:

import dlib
import cv2
# 使用 Dlib 的正面人脸检测器 frontal_face_detector
detector = dlib.get_frontal_face_detector()
# Dlib 的 68点模型
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
# 读取图片
img = cv2.imread("picture.jpg")
# 生成 Dlib 的图像窗口
win = dlib.image_window()
win.set_image(img)
# 使用 detector 检测器来检测图像中的人脸
faces = detector(img, 1)
print("人脸数:", len(faces))
for i, d in enumerate(faces):
    print("第", i+1, "个人脸的矩形框坐标:",
          "left:", d.left(), "right:", d.right(), "top:", d.top(), "bottom:", d.bottom())
    # 使用predictor来计算面部轮廓
    shape = predictor(img, faces[i])
    # 绘制面部轮廓
    win.add_overlay(shape)
# 绘制矩阵轮廓
win.add_overlay(faces)
dlib.hit_enter_to_continue()

运行结果:
在这里插入图片描述
在这里插入图片描述

【 2. OpenCV 绘制人脸特征点 】

同样的,我们也可以调用OpenCV的绘点函数,绘制出每一个点。

cv2.circle(img, center, radius, color, thickness)
#	image: 图片对象;
#	center: 圆心坐标;
#	radius: 圆半径;
#	color: 以BGR方式指定的颜色,例如(255,0,0)是蓝色;
#	thickness:线的粗细。

完整示例:

import cv2
import dlib
# 读取图片
img_path = "picture.jpg"
img = cv2.imread(img_path)
# 转换为灰阶图片
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 正向人脸检测器
detector = dlib.get_frontal_face_detector()
# 使用训练完成的68个特征点模型
predictor_path = "shape_predictor_68_face_landmarks.dat"
predictor = dlib.shape_predictor(predictor_path)
# 使用检测器来检测图像中的人脸
faces = detector(gray, 1)
for i, face in enumerate(faces):
    # 获取人脸特征点
    shape = predictor(img, face)
    # 遍历所有点
    for pt in shape.parts():
        # 绘制特征点
        pt_pos = (pt.x, pt.y)
        cv2.circle(img, pt_pos, 1, (255,0, 0), 2)
cv2.imshow('opencv_face_laowang',img)  # 显示图片
cv2.waitKey(0) # 等待用户关闭图片窗口
cv2.destroyAllWindows()# 关闭窗口

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MR_Promethus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值