2015-03-25 46 views
0

我正在从Opencv中的视频进行拼接。我使用此示例拼接视频的帧:http://docs.opencv.org/doc/tutorials/features2d/feature_detection/feature_detection.html。末了,我做这行合并与传递的迭代产生的线迹的新框架:Opencv调整一个针迹

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

对于第二个问题,你观察的是在估计单应性错误。这可能会无论是从:

  1. 漂移(如果您将沿着序列的单应性),其累积,即小错误和几十帧之后,开始变大
  2. 或(更可能),因为你的参考图像太对于你的新形象来说,这是一个古老的过程,他们展示的匹配点太少,不能提供准确的单应性,但足以找到一个通过cv::findHomography()内质量测试的人。

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

然后,当你缝合一个新的图像时,你的确是将这个图像投影到这个坐标系上。 您可以首先计算输入框4个角的投影坐标,测试它们是否适合当前的拼接结果,如果需要将其复制到新的(更大)图像,然后继续拼接新图像。

+0

嗨!在每一针步骤,我更新参考图像与刚才缝合的一个,所以我认为我是在你称为漂移的情况下。如果我遇到这种情况,我该如何解决?对于第一个问题,我会尽力去做你说的,并且让它知道它是否有效! – bjorn 2015-03-25 09:08:53

+0

如果您将拼接图像作为参考,某些情况下也可能会丢失一些信息(由于插值引入了模糊,或者拼接结果与当前帧之间的比例差异)。另一种可能性(可能具有更高的质量,但更多的开发开销)将是在第一遍中计算所有单应性,然后同时查找从所有输入帧优化的拼接图像。 – sansuiso 2015-03-25 09:14:13

+0

嗯我明白,但我不能做到这一点,因为它是一个流,而不是电脑上的视频文件..现在我试图调整针,如果我成功,我会让你知道。 。感谢您的快速回复! – bjorn 2015-03-25 10:54:28