我想将像小丑一样的脸的图像放入另一张脸(一个人)的轮廓中。我正在检测人脸并获得椭圆形轮廓。我可以计算出中心、半径、最高点、最低点、最左边和最右边的点。
如何将小丑脸(我可以通过从 png 的空背景中切出脸部然后检测轮廓来制作椭圆形的方形图像)放入人脸中?
或者至少,我如何将一个多边形拟合到另一个多边形中。
我可以轻松地将矩形图像放入矩形轮廓中,但面部不是那种形状。
Python 更可取,但 C++ 也是可管理的,谢谢。
编辑:按要求进行视觉表示:
我有

我想让它像这样:

但我希望小丑的脸伸展在男人的脸上并适合蓝色轮廓。
这个问题的一个简单而好的答案是找到轮廓(头部)上的极端顶部、底部、左侧和右侧点,然后调整蒙版大小以匹配长宽比,并将其放置以覆盖这 4 个点。
因为人的头部是椭圆形的,所以你可以用它fitEllipse()来给你这 4 点。这将自动解决人们倾斜头部的任何问题,因为无论角度如何,您都会知道哪一点是顶部、底部、左侧和右侧。
寻找椭圆的相关代码是:
vector<Point> contour;
// Do whatever you are doing to populate this vector
RotatedRect ellipse = fitEllipse(Mat(contour));
Run Code Online (Sandbox Code Playgroud)
还有一个示例以及文档RotatedRect。
// Resize your mask with these sizes for optimum fit
ellipse.size.width
ellipse.size.height
Run Code Online (Sandbox Code Playgroud)
你可以像这样旋转你的图像。
更新:
您可能还想找到轮廓的极值点,以了解需要将图像缩放多少以确保覆盖所有脸部。
| 归档时间: |
|
| 查看次数: |
2167 次 |
| 最近记录: |