【问题标题】:Face morphing using opencv使用opencv进行人脸变形
【发布时间】:2014-08-02 20:54:25
【问题描述】:

我能否获得一些关于如何使用 opencv 在实时视频中变形面部的想法?我尝试过Face substitution,但它是使用openFrameworks 实现的。

我想使用 opencv 实现相同的功能。除了直接将人脸替换代码从 openFrameworks 移植到 Opencv 之外,opencv 中还有其他可用的方法吗?

我也经历过这个link,但很少有人提到face morphing is deprecated in opencv

【问题讨论】:

标签: python opencv image-processing computer-vision scikit-image


【解决方案1】:

我最近写了一篇关于使用 OpenCV 进行面部变形的文章。我已经分享了 C++/Python 中的代码。你可以在这里找到详细信息

http://www.learnopencv.com/face-morph-using-opencv-cpp-python/

但基本思想如下。

  1. 在两个输入图像中查找点对应关系。
  2. 对点进行 Delaunay 三角测量。
  3. 变形量由参数 alpha 控制。例如,对于 alpha = 0,您将在下面的示例中获得 Ted Cruz,对于 alpha = 1,您将获得 Hillary Clinton。对于任何其他 alpha,它将是两者之间的混合。使用 alpha 通过取两个输入图像点的加权平均值来计算输出(变形)图像中点的位置。
  4. 计算输入图像中每个三角形与目标图像(变形图像)之间的仿射变换。
  5. 将每个输入图像的三角形扭曲到输出图像,并根据 Alpha 混合像素。对每个三角形执行此操作,您将获得输出的变形图像。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我不知道有什么专门做这个的库,但是你可以自己拼凑一些东西。您需要一组在所有面孔中都引用的通用fiducial points。然后你会想用这些点在上面做Delaunay triangulation

    现在您可以直接从一个面框转换到另一个面框,也可以将其写入中间标准化面,对其进行更改,然后将其写入任何位置。

    【讨论】:

      【解决方案3】:

      以下是使用 mesh-warping 算法实现面部变形的步骤(您可以使用 opencv 或 python scipy / scikit-image 实现它):

      1. Defining Correspondences:使用面部标志找到要对齐的面部之间的点对应(例如,使用dlib 检测标志)。
      2. Delaunay 三角剖分:您需要提供这些点的三角剖分(例如 Delaunay 三角剖分),用于变形(例如 scipy.spatialDelaunay)。
      3. C计算中间(变形)面:计算平均形状,将两个面变形为该形状(使用源图像中的三角形计算仿射变换,使用变形的三角形计算相应的图像和扭曲三角形内的点,并使用 alpha 混合扭曲的图像以获得最终的变形图像,使用scikit-imagewarp(),例如)。

      下一个动画显示了 mesh-warping 算法在 python 中使用scipy / numpy / scikit-image 实现的动画输出(从蒙娜丽莎图像开始到莱昂纳多的变形图像序列达芬奇图像)。这也可以在here 找到。

      另一个流行的算法是Beier-neely morphing algorithm (https://en.wikipedia.org/wiki/Beier%E2%80%93Neely_morphing_algorithm)

      【讨论】:

        【解决方案4】:

        使用 OpenCV 在 Python 中检查 face-morphing tool

        【讨论】:

          猜你喜欢
          • 2014-08-20
          • 2013-03-23
          • 2014-01-20
          • 2017-10-02
          • 2011-08-01
          • 2021-03-01
          • 2012-06-15
          • 1970-01-01
          相关资源
          最近更新 更多