我正在使用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
图像呢?
修改 抱歉,我不得不删除图片
答案 0 :(得分:0)
对于第二个问题,您观察到的是估计的单应性中的错误。这可能来自:
对于您的第一个问题,您需要添加一些代码来跟踪固定坐标系中拼接图像的当前边界。 我建议选择与第一张图片相关联的坐标。
然后,当您缝合新图像时,您真正做的是将此图像投影到此坐标框架上。 您可以首先计算输入帧的4个角的投影坐标,测试它们是否适合当前的拼接结果,如果需要,将其复制到新的(更大的)图像,然后继续缝合新图像。 p>