7

我可以得到一些关于如何使用 opencv 在实时视频中变形面部的想法吗?我尝试过人脸替换,但它是使用openFrameworks实现的。

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

我也浏览过这个链接,但很少有人提到面部变形在 opencv 中已被弃用

4

4 回答 4

11

我最近写了一篇关于使用 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 混合像素。对每个三角形执行此操作,您将获得输出的变形图像。

希望这可以帮助。

在此处输入图像描述

于 2016-03-15T17:26:58.763 回答
1

我不知道任何专门执行此操作的库,但是您可以自己拼凑一些东西。您需要一组在所有面上都引用的通用基准点。然后你会想用这些点对它进行Delaunay 三角剖分

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

于 2014-06-12T15:32:42.477 回答
1

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

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

下一个动画显示了在 python 中使用/ /实现网格变形算法的动画输出(从蒙娜丽莎图像到达芬奇图像的变形图像序列)。这也可以在这里找到。scipynumpyscikit-image

在此处输入图像描述

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

于 2019-09-01T21:53:42.063 回答
0

使用 OpenCV 在 Python 中检查面部变形工具

于 2019-06-12T02:55:01.217 回答