展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 图像处理 > 编程开发 > 用 Python 给你一个圣诞帽

用 Python 给你一个圣诞帽

圣诞将至,虽然咱不过这洋节,但是热闹还是要凑一下的,相信已经有很多圣诞帽相关的周边在流传了,今天咱们就自己动手,给头像增加一个圣诞帽基础知识准备在计算机中,图像是以矩阵的形式保存的,先行后列。所以,一张宽×高×颜色通道=480×256×3的图片会保存在一个256×480×3的三维张量中。图像处理时也是按照这种思想进行计算的(其中就包括OpenCV下的图像处理),即高×宽×颜色通道。数字图像对于一幅的数字图像,我们看到的是肉眼可见的一幅真正的图片,但是计算机看来,这副图像只是一堆亮度各异的点。一副尺

本文目录

    圣诞将至,虽然咱不过这洋节,但是热闹还是要凑一下的,相信已经有很多圣诞帽相关的周边在流传了,今天咱们就自己动手,给头像增加一个圣诞帽

    基础知识准备

    在计算机中,图像是以矩阵的形式保存的,先行后列。所以,一张宽×高×颜色通道=480×256×3的图片会保存在一个256×480×3的三维张量中。图像处理时也是按照这种思想进行计算的(其中就包括 OpenCV 下的图像处理),即 高×宽×颜色通道。

    数字图像

    对于一幅的数字图像,我们看到的是 肉眼可见的一幅真正的图片,但是计算机看来,这副图像只是一堆亮度各异的点。一副尺寸为 M × N 的图像可以用一个 M × N 的矩阵来表示,矩阵元素的值表示这个位置上的像素的亮度,一般来说像素值越大表示该点越亮。

    一般来说,灰度图用 2 维矩阵表示,彩色(多通道)图像用 3 维矩阵(M× N × 3)表示。

    图像通道

    描述一个像素点,如果是灰度,那么只需要一个数值来描述它,就是单通道。如果一个像素点,有RGB三种颜色来描述它,就是三通道。而四通道图像,就是R、G、B加上一个A通道,表示透明度。一般叫做alpha通道,表示透明度。

    ROI和mask

    Setting Region of Interest (ROI),翻译成白话为,设置感兴趣的区域。mask是做图像掩膜处理,相当于把我们不关心的部位覆盖住,留下ROI部分。上面说的alpha就可以作为mask。

    矩阵(Numpy)知识

    矩阵索引、切片等,这里我自己掌握的也不好,就不多说了,小伙伴儿们可以自行学习。

    环境准备

    有了基础知识后,我们来简单看下代码。

    首先安装需要要用到的 OpenCV​ 和 dlib 库,使用pip分别安装之

    pip install python-opencv
    
    pip install dlib

    然后手工在网上下载数据模型文件 shape_predictor_5_face_landmarks.dat,地址如下:http://dlib.net/files/,下载后放到项目目录下。

    有兴趣的同学可以玩玩那个 shape_predictor_68_face_landmarks.dat,识别出的人脸关键点有68个之多呢。

    用 Python 给你一个圣诞帽

    代码处理

    帽子处理

    我们首先要做的就是处理帽子,我们使用的图片如下

    用 Python 给你一个圣诞帽

    先提取帽子图片的rgb和alpha值

    # 帽子图片
    hat_img3 = cv2.imread("hat.png", -1)
    r, g, b, a = cv2.split(hat_img3)
    rgb_hat = cv2.merge((r, g, b))
    cv2.imwrite("rgb_hat.jpg", rgb_hat)
    cv2.imwrite("alpha.jpg", a)
    print(a)
    print(hat_img3.shape)
    print(rgb_hat.shape)

    我们得到的效果如下:

    rgb图

    用 Python 给你一个圣诞帽

    alpha图

    用 Python 给你一个圣诞帽

    对于的打印出的a数值如下:

    [[0 0 0 ... 0 0 0]
     [0 0 0 ... 0 0 0]
     [0 0 0 ... 0 0 0]
     ...
     [0 0 0 ... 0 0 0]
     [0 0 0 ... 0 0 0]
     [0 0 0 ... 0 0 0]]

    人脸检测

    下面进行人脸检测,使用dlib处理。

    # 人脸检测
    dets = self.detector(img, 1)
    x, y, w, h = dets[0].left(), dets[0].top(), dets[0].right() - dets[0].left(), dets[0].bottom() - dets[0].top()
    # 关键点检测
    shape = self.predictor(img, dets[0])
    point1 = shape.parts()[0]
    point2 = shape.parts(2)
    # 求两点中心
    eyes_center = ((point1.x + point2.x) // 2, (point1.y + point2.y) // 2)

    接下来是按照比例缩小帽子的图片

    # 帽子和人脸转换比例
    hat_w = int(round(dets[0].right()/1.5))
    hat_h = int(round(dets[0].bottom() / 2))
    if hat_h > y:
    hat_h = y - 1
    hat_newsize = cv2.resize(rgb_hat, (hat_w, hat_h))
    mask = cv2.resize(a, (hat_w, hat_h))
    mask_inv = cv2.bitwise_not(mask)
    dh = 0
    dw = 0
    
    bg_roi = img[y+dh-hat_h:y+dh,(eyes_center[0]-hat_w//3):(eyes_center[0]+hat_w//3*2)]

    ROI 提取

    进行 ROI 提取

    # 用alpha通道作为mask
    mask = cv2.resize(a, (resized_hat_w, resized_hat_h))
    mask_inv = cv2.bitwise_not(mask)

    mask 变量,取出了帽子的区域。

    用 Python 给你一个圣诞帽

    mask_inv 变量,用来取出人脸图片中安装帽子的区域。

    用 Python 给你一个圣诞帽

    接下来在人脸图片中取出安装帽子的区域(ROI)

    # 原图ROI
    # bg_roi = img[y+dh-resized_hat_h:y+dh, x+dw:x+dw+resized_hat_w]
    bg_roi = img[y + dh - resized_hat_h:y + dh,
     (eyes_center[0] - resized_hat_w // 3):(eyes_center[0] + resized_hat_w // 3 * 2)]

    再接下来在人脸图片中取出帽子形状区域

    # 原图ROI中提取放帽子的区域
    bg_roi = bg_roi.astype(float)
    mask_inv = cv2.merge((mask_inv, mask_inv, mask_inv))
    alpha = mask_inv.astype(float) / 255
    # 相乘之前保证两者大小一致(可能会由于四舍五入原因不一致)
    alpha = cv2.resize(alpha, (bg_roi.shape[1], bg_roi.shape[0]))
    # print("alpha size: ",alpha.shape)
    # print("bg_roi size: ",bg_roi.shape)
    bg = cv2.multiply(alpha, bg_roi)
    bg = bg.astype('uint8')

    这里是把图片默认的uint8​类型转换成了float类型进行运算,最后又转换回来。

    合成的图片

    用 Python 给你一个圣诞帽

    黑黑的部分就是我们要放置帽子的地方。

    在帽子图片中提取帽子部分。

    # 提取帽子区域
    hat = cv2.bitwise_and(resized_hat, resized_hat, mask=mask)

    使用刚刚调整大小的帽子图片来提取。

    用 Python 给你一个圣诞帽

    可以看到,除了帽子部分,其他区域已经掩模处理了。

    以上就是提取ROI的过程,比较难懂,需要好好琢磨,尤其是矩阵的切片、mask处理部分。

    合成图片

    最后一步就是把人脸图片与帽子合成到一起了,也就是把人脸空余帽子部分的图片区域和帽子只展示帽子区域的图片区域(有点拗口)合并在一起。

    # 相加之前保证两者大小一致(可能会由于四舍五入原因不一致)
    hat = cv2.resize(hat, (bg_roi.shape[1], bg_roi.shape[0]))
    # 两个ROI区域相加
    add_hat = cv2.add(bg, hat)

    效果如下:

    用 Python 给你一个圣诞帽

    刚刚好,完美叠加图片。

    最后把这个片段放回人脸原图中,展示图片

    img[y+dh-hat_h:y+dh, (eyes_center[0]-hat_w//3):(eyes_center[0]+hat_w//3*2)] = add_hat

    用 Python 给你一个圣诞帽

    美美的图片就出来啦!

    我们再尝试几张不同的图片。

    用 Python 给你一个圣诞帽

    用 Python 给你一个圣诞帽

    整体效果还不错哦,需要注意的是,在测试的时候,我们尽量选择人脸占比比较大的图片来合成,效果要好很多哦~

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    图像处理 编程开发 Python
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirServer Windows版
    AirServer Windows版

    AirServer Windows版可把电脑变成AirPlay、Google Cast和Miracast无线投屏接收端,适合会议演示、课堂教学及家庭大屏分享。发送设备通常无需另装客户端,并可同时接收和智能排列多个镜像会话。