首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

原来12月刷屏的圣诞帽是用python做的?

“请给我的头像来一顶圣诞帽 @微信官方“

还记得上个月,你的朋友圈是不是被类似的短句刷屏了?

不过让我先喘口气,今天我们带来的是人脸识别,教你如何用python制作圣诞帽。

首先要讲解原理,这是我们部门两个最可爱的妹子,经她们同意我就用这张照片来讲解(个人隐私问题已打码处理)。

图像学是一个很复杂的学科,真的研究起来,没有极为强大的知识是不行的,蝈蝈只是个码农,并不会那些东西,好在python为我们封装了一个包python-opencv,只要几行代码就能完成人脸识别了。

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

右边这张图的红框,是根据网上教程写的,opencv自动人脸识别,并作标记机,我们就不画长方形了,我们可以改成把帽子粘帖在他们头上,就像图中遮挡物一样。

Python—opencv的原理就是把每个像素点用一个BGR的列表所表示比如下图。人脸识别的原理应该就是计算机寻找颜色浅黄,白,黑,褐色的一块近似矩形的区域。

准备工作

语言:Python3

工具:Pycharm,Windows

画图/Photoshop

技术:Opencv2/Opencv3,numpy

流程概述

贴图前期处理

人脸识别

图片缩放

调试戴帽位置

出图

详细实现

Opencv安装pip install python-opencv

或许会碰到无法编译的问题,可以直接去官方下载包,然后复制cv2.pyd到python site-package目录里就OK了

贴图处理

这是需要带的帽子,由于接触opencv时间较短,alpha通道啊,掩膜的位与运算,理解并不透彻,所以只能用最简单的色差抠图。

这是处理以后的帽子,可以看出每一块颜色都不同

这便是贴图处理的代码,读取我们已经颜色处理好的图片

然后使用hsv变换让颜色更鲜明,橙色的背景变成了金色

第三行是从图片中获取不含金色部分的掩膜

第四行显示图片,最后效果如下

人脸识别

以上便是人脸识别并画框框的代码,我们需要做的是更换打圈的代码,就是画框部分

代码的含义是读取背景图片,然后载入官方人脸识别训练文件,把图片变成灰度显示加快速度和精确性,然后返回人脸的范围(x,y是起始坐标,w,h是该范围矩形的宽度和高度)

图片缩放

背景图片是各种各种的,所以人脸有大有小,但是我们的贴图却是一张我们需要调整贴图大小适应脸形

先获取原图片大小,然后指定要缩小的宽度w,然后按比例计算出高度,具体谈实现就是这么简单。我这里帽子是永远和脸部一样宽,大家可以修改w参数,让帽子更小一点。

同时别忘记我们的掩膜(那张黑白两色的图片)也同样缩小

调试戴帽子位置

这一步是整个项目最最核心的位置,也是最可优化的部分,代码如下图:

按长宽遍历缩放以后的贴图,如果发现掩膜同一部位是黑色的,那就把贴图该部位的像素替换到人脸部位上方某个位置(可以调整)

最后实现效果就如最开始图片所示,最后蝈蝈提醒大家,千万别把贴图主色调设定成绿色的,小心被打啊。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180203G0BMGF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券