如何给头像增加圣诞帽

来源:互联网 发布:龙虎计划软件 编辑:程序博客网 时间:2024/04/29 15:49


import cv2
import random


# OpenCV 人脸检测
face_patterns = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
sample_image = cv2.imread('img/fffc.jpg')
faces = face_patterns.detectMultiScale(sample_image,
                                       scaleFactor=1.1,
                                       minNeighbors=8,
                                       minSize=(50, 50))
# 圣诞帽
hats = []
for i in range(4):
    hats.append(cv2.imread('img/hat%d.png' % i, -1))


for face in faces:
    # 随机一顶帽子
    hat = random.choice(hats)
    # 调整帽子尺寸
    scale = face[3] / hat.shape[0] * 1.25
    hat = cv2.resize(hat, (0, 0), fx=scale, fy=scale)
    # 根据人脸坐标调整帽子位置
    x_offset = int(face[0] + face[2] / 2 - hat.shape[1] / 2)
    y_offset = int(face[1] - hat.shape[0] / 2)
    # 计算贴图位置,注意防止超出边界的情况
    x1, x2 = max(x_offset, 0), min(x_offset + hat.shape[1], sample_image.shape[1])
    y1, y2 = max(y_offset, 0), min(y_offset + hat.shape[0], sample_image.shape[0])
    hat_x1 = max(0, -x_offset)
    hat_x2 = hat_x1 + x2 - x1
    hat_y1 = max(0, -y_offset)
    hat_y2 = hat_y1 + y2 - y1
    # 透明部分的处理
    alpha_h = hat[hat_y1:hat_y2, hat_x1:hat_x2, 3] / 255
    alpha = 1 - alpha_h
    # 按3个通道合并图片
    for c in range(0, 3):
        sample_image[y1:y2, x1:x2, c] = (alpha_h * hat[hat_y1:hat_y2, hat_x1:hat_x2, c] + alpha * sample_image[y1:y2, x1:x2, c])


# 保存最终结果

cv2.imwrite('faces_detect.png', sample_image)




依赖的库在https://github.com/zwd1993/faceHats

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 广州周边旅游 广州旅游团报价 广州旅行社报价 广州长洲岛旅游攻略 广州附近旅游 广州市旅游公司 广州观光旅游 广州旅游公司 广州厦门旅游 广州旅游住宿 广州当地旅游 广州到杭州旅游 广州国际旅游展 广州旅游住哪里方便 广州到北京旅游 广州白云区旅游 广州旅游住宿攻略 广州自由行旅游 广州旅游费用 广州花都区旅游 广州长隆旅游团购 广州旅游推荐 春节广州旅游 广州自驾游攻略 广州攻略经典三日游 广州动物园一日游攻略 广州短途自驾一日游 广州附近短途自驾游 广州近郊自驾游一天 广州科技馆一日游攻略 广州游玩景点一日游 广州短途开车一日游 广州游攻略 广州小蛮腰一日游攻略 广州科学馆详细一日游攻略 广州沙面岛一日游攻略 广州长洲岛一日游 广州自驾游 广州市一日游必去景点 广州周边自驾游 广州周边一日游好去处