程序员教你用python替代繁琐复杂的ps步骤实现图片合成换脸

具体过程分为以下四步

面部标志提取

dlib提供了实现面部特征提取的接口:

get_landmarks

用于检测面部

关键特征点的坐标

普式分析法(Procrustes Analysis)计算人脸对齐映射矩阵

仿射变换

向量的平移

放缩及旋转变换

图像的平移

放缩及旋转都是

原始图像的坐标进行计算。

怎么找到映射矩阵M

便是普式分析法


输出是矩阵M

transformation_from_points()

利用opencv及计算得到的映射矩阵对图像进行映射

接受三个参数

需要变换的原始图像

映射矩阵M 以及变换的图像大小

4 颜色(肤色、光线)校正

这里使用了颜色平衡

但不是直接使用全图的常数比例因子

而是采用每个像素的局部比例因子

mask提取

蒙版会画出两个白色的凸多边形

帮助消除剩下的不连续部分

最后的图像叠加

combined_mask

相加

从为得到最后的换脸结果图

好了,下面来看案例实战操作

程序思路

用 decect 接口

获取人脸关键点

return_landmark 参数

不能为 0 不然不会返回人脸关键点

用 mergeface 接口,合成脸部图像

注意图片文件大小不超过 2 MB

示例运行代码

封装一个多张照片的合成函数

注意边界特殊情况

图片1:

图片2:

效果:

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 朋友托我画的生肖组合,实在不会画狗狗~ 让画面尽量保持干净! 粗糙的笔法(囧) 实在不会画眼睛~ 实在不会画狗狗,...
    机器猫的鱼豆腐阅读 271评论 0 2
  • 就像当你出门时大雨滂沱, 知道打伞在街上走三分钟也会浑身湿透, 就转身走进附近茶餐厅坐下, 喝一杯咖啡,抽一根烟,...
    浮语泛花阅读 1,067评论 0 0