Opencv 调整一针大小

Opencv Resize a stitch

我正在用 Opencv 中的视频制作马赛克。我正在使用此示例拼接视频的帧:http://docs.opencv.org/doc/tutorials/features2d/feature_detection/feature_detection.html。最后,我这样做是为了将新帧与在传递的迭代中创建的针脚合并:

Mat H = findHomography(obj, scene, CV_RANSAC);

static Mat rImg;
warpPerspective(vImg[0], rImg, H, Size(vImg[0].cols, vImg[0].rows), INTER_NEAREST);//(vImg[0], rImg, H, Size(vImg[0].cols * 2, vImg[0].rows * 2), CV_INTER_LINEAR);

static Mat final_img(Size(rImg.cols*2, rImg.rows*2), CV_8UC3);
static Mat roi1(final_img, Rect(0, 0, vImg[1].cols, vImg[1].rows));
Mat roi2(final_img, Rect(0, 0, rImg.cols, rImg.rows));

rImg.copyTo(roi2);
vImg[1].copyTo(roi1);

imwrite("stitch.jpg", final_img);
vImg[0] = final_img;

所以这是我的问题:显然针迹在每次迭代中都会变大,那么我如何调整它的大小以使其适合 final_img 图像?

编辑 抱歉,我不得不删除图片

对于第二个问题,您观察到的是估计的单应性错误。这可能来自:

  1. 漂移(如果你沿着序列链接单应性),即在几十帧后累积并变大的小错误
  2. 或者(更有可能)因为你的参考图像相对于你的新图像来说太旧了,它们展示的匹配点太少而无法给出准确的单应性,但足以找到一个通过内部质量测试的图像 cv::findHomography().

对于您的第一个问题,您需要添加一些代码来跟踪固定坐标系中拼接图像的当前边界。 我建议选择与第一张图片链接的坐标。

然后,当你拼接一张新图像时,你真正做的是将这张图像投影到这个坐标系上。 例如,您可以先计算传入帧的 4 个角的投影坐标,测试它们是否适合当前拼接结果,必要时将其复制到新的(更大的)图像,然后继续拼接新图像。