我有一张脸的形状以及那张脸的重建,我想模拟初始形状的相应图像。
基本上,我想将点从原始形状移动到脸部重建所指示的位置。我试图通过使用薄板样条扭曲来实现这一点,这是它的实现:http://ipwithopencv.blogspot.ro/2010/01/thin-plate-spline-example.html。
然而,它并没有像我想要的那样工作。我想固定图像的角落,只是为了移动定义面部的相应点。我可以用2张图片说明这一点。在第一张图片中,我有原始面部的形状和重建的形状。
在这里,我通过使用上述链接中的代码获得了我想要修改的图片和生成的图片。绿点标记原始面部点,蓝点标记其新位置以及我想重新定位它们的位置并伸展我的脸。
我想要的只是将绿点移动到蓝点,使其看起来变形。你知道你测试过的任何方法吗?
答案 0 :(得分:1)
修复角落很容易。只需为四个图像角添加四个额外的对应关系。就你的例子而言:
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));
当然, width 是图像宽度,高度是图像高度