程序员教你用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:

效果:

你可能感兴趣的:(程序员教你用python替代繁琐复杂的ps步骤实现图片合成换脸)