七天长假,看到很多人都在朋友圈晒照片,宅在家里的朋友们是不是也心痒痒,很向往外面的世界。不用难过,今天强哥教大家发一张宅在家里,也能假装自己在外面玩的照片。
受之前大火的换脸技术的启发,我们用python来给照片换脸。先找一张别人的旅游照片,然后把照片里别人的脸换成我们自己的脸,一张自己在旅游的照片就做好了。
换脸技术的原理比较复杂。简单的说,它包含这样几个步骤:
第一步,检测人脸的位置。像下面这样
这一步根据人脸的68个定位点,识别出人脸的位置。我之前有一篇文章详细的介绍过这一过程,可参考这篇
第二部,将识别出的人脸切割成一个个小三角形,像下面这样
第三步,对分割出来的小三角形做放射变换,映射到目标照片上人脸的对应位置,像下面这样
经过这一步生成出来的照片,脸的位置是重合了,但看上去总觉得不太自然,感觉像带了一个面具,肤色明显存在差异,边缘的过渡也不自然,所以我们还需要下面一步。
第四步,无缝克隆。opencv有一个叫seamlessClone的函数,可以把源图片无缝的克隆到目标图片上,给人感觉好像源图片融入了目标图片一样。如果我们对上面的换脸,运用无缝克隆,生成的图片是像下面这样的
明显看到,这张照片比之前那张自然多了,肤色一致了,边缘过渡也不再突兀了。
换脸技术的原理大致就是这样。代码比较复杂,这里不作展开。
接下来,我们应用换脸技术,来做一张人在旅途的照片。
为了假装自己在旅行,强哥从网上找了一张别人的照片,把里面的人脸换上自己的这张照片
得到这样一张旅行照
有了照骗,接下来就开开心心地发朋友圈啦
是不是很酷~