+
37
-

python如何检测图片中脸部区域的大小与位置?

python如何检测图片中脸部区域的大小与位置?

并可以无缝更换这个区域的照片?

网友回复

+
18
-

Python 检测脸部区域并替换照片

要检测图片中脸部区域的大小与位置,并实现无缝更换,可以使用以下方法:

方法一:使用 OpenCV 和 dlib
import cv2
import dlib
import numpy as np

# 加载预训练的人脸检测器和关键点检测器
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")  # 需要下载此模型文件

def detect_and_replace_face(source_img_path, target_img_path, output_path):
    # 读取源图像(要替换的人脸)和目标图像
    source_img = cv2.imread(source_img_path)
    target_img = cv2.imread(target_img_path)

    # 转换为灰度图像以加快检测速度
    gray_source = cv2.cvtColor(source_img, cv2.COLOR_BGR2GRAY)
    gray_target = cv2.cvtColor(target_img, cv2.COLOR_BGR2GRAY)

    # 检测人脸
    source_faces = detector(gray_source)
    target_faces = detector(gray_target)

    if len(source_faces) == 0 or len(target_faces) == 0:
        print("未检测到人脸!")
        return

    # 获取第一个人脸(可根据需要修改)
    source_face = source_faces[0]
    target_face = target_faces[0]

    # 获取关键点
    source_landmarks = predictor(gray_source, source_face)
    target_landmarks = predictor(gray_target, target_face)

    # 提取关键点坐标
    source_points = np.array([[p.x, p.y] for p in source_landmarks.parts()], dtype=np.int32)
    target_points = np.array([[p.x, p.y] for p in target_landmarks.parts()], dtype=np.int32)

    # 计算凸包
    source_hull = cv2.convexHull(source_points)
    target_hull = cv2.con...

点击查看剩余70%

我知道答案,我要回答