自动为你的照片带上一副眼镜
咪哥杂谈
共 1133字,需浏览 3分钟
·
2020-04-07 23:22
咪哥杂谈
本篇阅读时间约为 6 分钟。
1
前言
最终实现效果:
2
环境准备
回顾链接:
如何用技术手段将图片背景变为透明?
用Python鬼畜特朗普照片,了解下?
3
原理思路讲解
1. 裁剪眼镜图片,以左上角为基点
随便网上找一张眼镜图片,原本大小为下图所示:
使用程序来实现图片叠加,是以图片左上角为基准,显然,如果用现在这个图片附到周董开车的脸上,眼镜的这张图片即使透明化也不能完美的贴上去。
所以需要尽可能的将眼镜图片裁剪成如下的样子(白色背景是图片实际大小):
2. 人脸识别库,识别出人脸的左侧脸颊和左眼眉的空间点
(左脸颊x坐标,左眼眉y坐标),这组坐标即是我们要将眼镜图片以左上角为基准,贴过来的图片。
对比看下,眼镜腿是不是差不多在红框的位置:
3. 重塑眼镜图片尺寸大小
"附属品"的图片大小,需要根据原图片的像素算出一个缩小比例的因子,根据因子对"附属品"图片进行对应的比例进行缩小。
而这个因子如何计算?(需要点基础数学知识)
需要得知眼镜原图片的长像素,比如我的现在眼镜原图像素为:
而周董原图中,脸颊的左端点到右端点可以计算出来:
所以等比缩放因子,即 脸颊像素长度/眼镜图片长度像素。
案例中,缩放因子 = 446/1586 ≈ 0.28
4. 组合图片
以上所有步骤准备好后,直接将眼镜图片组合到周董图片上即可。
4
置换图片,呈现结果
下图是胡歌在录制《朗读者》时候的一个截图:
自动戴眼镜,成像之后:
5
总结
其中需要动脑子的地方,就是关于”附属品“图片的等比例缩小,有个简单的小算法,还有一个地方就是"附属品"图片的左上方坐标,对标到人脸的左脸颊上方。
对于代码的细节,我没有在文章中写出来,写出来估计会很枯燥,如果你对源代码感兴趣,老规矩,我上传到 github 了。
后台回复 "眼镜" ,即可获得源码地址。
题图 - pexels - Philipp Birmes
评论