当前位置:   article > 正文

利用opencv进行换脸_高效opencv换脸算法

高效opencv换脸算法

关于换脸的什么背景什么的,我也就不提了,直接说一下换脸所需要的步骤吧,在这里我用的是opencv和之前我用的CLM框架,CLM还是进行人脸关键点检测,利用opencv进行脸部替换和颜色风格统一。

接下来是利用opencv换脸的一般步骤:

1.脸部对齐:也就是把前一个人的脸的部分分割出来覆盖到下一个人的脸的地方。如下图:

脸部关键点检测

因为我们要变换的两张脸的形状一般是不同的,所以我们需要对原始的脸进行一个变形,但是在变形后我也不希望脸部变得无法识别,所以我们首先用CLM进行面部关键点检测。在这里我们需要注意的仅仅只有面部的边界点。

2.寻找面部凸包

凸包的概念在opencv中有,在这里就是将边界点顺序相连形成多边形。

  1. vector<int> hullIndex;
  2. // points is of type vector<Point2f> obtained
  3. // using dlib.
  4. convexHull(points, hullIndex, false, false);
  5. // hullIndex is a vector of indices of points
  6. // that form the convex hull.

3.三角剖分

这个步骤就是利用面部边界点进行三角剖分。通过这种方式将面部区域细分乘多个微小区域。

4.三角形的仿射变换

之前提到了,我们需要覆盖的脸部很多都是不一样形状的,所以在这里我们要根据这些三角区域进行仿射变换,最终能够合理的覆盖到原始脸部。

无缝克隆

上面我们变换之后会发现颜色很尴尬,一点都不和谐,在这种情况下,我们就需要用到opencv里面的seamlessclone这个函数,这个函数的效果就是使得mask内的区域色调什么的尽可能和边界之外的部分保持一致。

seamlessClone(src, dst, mask, center, output, NORMAL_CLONE);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/128806
推荐阅读
相关标签
  

闽ICP备14008679号