OpenCV - 适用于薄板花键翘曲的实现

Sim*_*mon 5 c++ opencv

我有一个脸的形状与该脸的重建一起,我想模拟初始形状的相应图像.

基本上,我想将点从原始形状移动到由重建面部指示的位置.我试图通过使用薄板样条扭曲来实现这一点,这是它的实现:http://ipwithopencv.blogspot.ro/2010/01/thin-plate-spline-example.html.

但是,它并没有像我想要的那样工作.我想固定图像的角落,只是为了移动定义面部的相应点.我可以用2张图片说明这一点.在第一张图片中,我有原始面部的形状和重建的形状. 在此输入图像描述

在这里,我通过使用上面提到的链接中的代码获得了我想要修改的图片和结果图片.绿点标记原始面部点,蓝点标记新位置,我想重新定位它们并伸展我的脸.

在此输入图像描述

我想要的只是将绿点移动到蓝点,使其看起来变形.你知道你测试过的任何方法吗?

AD-*_*530 2

固定角落非常容易。只需为四个图像角添加四个额外的对应关系即可。就你的例子而言:

iP.push_back(cv::Point(0, 0));
iiP.push_back(cv::Point(0, 0));
iP.push_back(cv::Point(0, height-1));
iiP.push_back(cv::Point(0, height-1));
iP.push_back(cv::Point(width-1, 0));
iiP.push_back(cv::Point(width-1, 0));
iP.push_back(cv::Point(width-1, height-1));
iiP.push_back(cv::Point(width-1, height-1));
Run Code Online (Sandbox Code Playgroud)

当然, width是图像宽度,height是图像高度