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
图像?
编辑
抱歉,我不得不删除图片
对于第二个问题,您观察到的是估计的单应性错误。这可能来自:
- 漂移(如果你沿着序列链接单应性),即在几十帧后累积并变大的小错误
- 或者(更有可能)因为你的参考图像相对于你的新图像来说太旧了,它们展示的匹配点太少而无法给出准确的单应性,但足以找到一个通过内部质量测试的图像
cv::findHomography()
.
对于您的第一个问题,您需要添加一些代码来跟踪固定坐标系中拼接图像的当前边界。
我建议选择与第一张图片链接的坐标。
然后,当你拼接一张新图像时,你真正做的是将这张图像投影到这个坐标系上。
例如,您可以先计算传入帧的 4 个角的投影坐标,测试它们是否适合当前拼接结果,必要时将其复制到新的(更大的)图像,然后继续拼接新图像。
我正在用 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
图像?
编辑 抱歉,我不得不删除图片
对于第二个问题,您观察到的是估计的单应性错误。这可能来自:
- 漂移(如果你沿着序列链接单应性),即在几十帧后累积并变大的小错误
- 或者(更有可能)因为你的参考图像相对于你的新图像来说太旧了,它们展示的匹配点太少而无法给出准确的单应性,但足以找到一个通过内部质量测试的图像
cv::findHomography()
.
对于您的第一个问题,您需要添加一些代码来跟踪固定坐标系中拼接图像的当前边界。 我建议选择与第一张图片链接的坐标。
然后,当你拼接一张新图像时,你真正做的是将这张图像投影到这个坐标系上。 例如,您可以先计算传入帧的 4 个角的投影坐标,测试它们是否适合当前拼接结果,必要时将其复制到新的(更大的)图像,然后继续拼接新图像。