用Python就可以给你的头像戴上圣诞帽,别@微信团队了!

2019年5月31日 By:

用Python就能够给你的头像戴上圣诞帽,别@微信团队了!

 · 
2017-12-25
用Python写个法式,给头像加之圣诞帽

编者案:本文来自微信公众号,作者冰不语 ,原文标题:用Python给头像加之圣诞帽,36氪经授权发布。

随着圣诞的到来,大家纷纭@民间微信给自己的头像加之一顶圣诞帽。当然这种事情用良多P图软件都能够做到。但是作为一个学习图象处置的技术人,还是认为咱们有必要写一个法式来做这件事情。而且这完全能够作为一个练手的小名目,工作量不大,而且很有意思。

用到的工具

  • OpenCV(毕竟咱们次要的内容就是OpenCV…)

  • dlib(前一篇文章刚说过,dlib的人脸检测比OpenCV更好用,而且dlib有OpenCV没有的要害点检测。)

用到的语言为Python。但是完全能够改成C++版本,时间有限,就不写了。有兴趣的小搭档能够拿来练手。

流程

一、素材预备

首先咱们需求预备一个圣诞帽的素材,格式最好为PNG,因为PNG的话咱们能够直接用Alpha通道作为掩膜使用。咱们用到的圣诞帽以下图:

用Python就能够给你的头像戴上圣诞帽,别@微信团队了!

咱们通过通道分离能够失掉圣诞帽图象的alpha通道。代码以下:

用Python就能够给你的头像戴上圣诞帽,别@微信团队了!

为了能够与rgb通道的头像图片举行运算,咱们把rgb三通道合成一张rgb的彩色帽子图。Alpha通道的图象以下图所示。

用Python就能够给你的头像戴上圣诞帽,别@微信团队了!

二、人脸检测与人脸要害点检测

咱们用下面这张图作为咱们的测试图片。

用Python就能够给你的头像戴上圣诞帽,别@微信团队了!

下面咱们用dlib的正脸检测器举行人脸检测,用dlib提供的模子提取人脸的五个要害点。代码以下:

用Python就能够给你的头像戴上圣诞帽,别@微信团队了!

这部分效果以下图:

三、调解帽子大小

咱们拔取两个眼角的点,求核心作为放置帽子的x方向的参考坐标,y方向的坐标用人脸框上线的y坐标表示。而后咱们按照人脸检测失掉的人脸的大小调解帽子的大小,使得帽子大小合适。

用Python就能够给你的头像戴上圣诞帽,别@微信团队了!

四、提取帽子和需求增添帽子的区域

依照以前所述,去Alpha通道作为mask。并求反。这两个mask一个用于把帽子图中的帽子区域掏出来,一个用于把人物图中需求填帽子的区域空出来。后面你将会看到。

用Python就能够给你的头像戴上圣诞帽,别@微信团队了!

从原图中掏出需求增添帽子的区域,这里咱们用的是位运算操作。

用Python就能够给你的头像戴上圣诞帽,别@微信团队了!

这是的背景区域(bg)以下图所示。能够看到,刚好是需求添补帽子的区域缺失了。

而后咱们提取帽子区域。

用Python就能够给你的头像戴上圣诞帽,别@微信团队了!

提取失掉的帽子区域以下图。帽子区域正好与上一个背景区域互补。

五、增添圣诞帽

最后咱们把两个区域相加。再放回到原图中去,就能够失掉咱们想要的圣诞帽图了。这里需求注意的就是,相加以前resize一下保证二者
大小一致,因为可能会因为四舍五入原因不一致。

用Python就能够给你的头像戴上圣诞帽,别@微信团队了!

最后咱们失掉的效果图以下所示。

用Python就能够给你的头像戴上圣诞帽,别@微信团队了!