OpenCV图像拼接无法正常工作

时间:2015-05-05 13:57:52

标签: c++ image opencv image-processing image-stitching

我是初学程序员,刚开始使用OpenCV。 我想用OpenCV's stitching.cpp Sample program将2幅图像拼接在一起当我尝试缝合图像时,我要么得到一个"不能缝合图像,错误代码= 1"或者图像中出现了很多黑色的空白区域。我拍摄照片时尝试尽可能多地重叠,但事实仍然如此。 我拍摄照片的方式有问题吗? 以下是我自己拍摄的照片及其输出的示例:

输入图片:

Input 1 Input 2

输出图片:

Output

这是一个糟糕的输出。注意黑色空间以及图像看起来有多么不同。输出图像还有一点我无法显示,因为imwrite没有保存文件。我不得不使用imshow,然后做一个屏幕截图,但图像太宽,无法在一个屏幕截图中捕获。无论如何,仍然不是一个好的输出。

以下是我上网另一个拼接程序的示例图片。这些图像完美地拼接在一起:

Input 1 Input 2

输出:

Output

2 个答案:

答案 0 :(得分:1)

我在查看上面的图像后猜测,您捕获的图像太难以推断可靠的匹配。您可能知道,拼接包括:

  1. 寻找关键点
  2. 通过计算相应描述符之间的距离来匹配关键点
  3. 一些异常值检测过程,如RANSAC
  4. 获得匹配关键点后,获得单应性。要获得单应性,您至少应该有8对匹配的关键点。实际上,您可能需要更多,因为某些异常值可能无法删除。
  5. 你在一个案例中得到了错误拼接的图像,并且拼接非常适合另一对图像,表明你的单应性错误。 Homography取决于匹配的关键点,因此这就是真正的错误所在。

    在您发布的第一组图像中,两者都包含键盘。如果SIFT等关键点检测和匹配算法与第二张图像中第二台计算机的 left-shift 的第一张图像中的右移匹配,我不会感到惊讶。这是完全错误的,会弄乱单应性。同样,第一张图像中的屏幕可以与第二张图像中右侧计算机的屏幕匹配(它应该与左侧计算机匹配)。

    以上所有都是我的猜测,但我相信它们是正确的。确认这些的好方法是可视化匹配。您的图像不应该有很多重复和模糊的模式。例如,键盘键,屏幕上的小文本等。

答案 1 :(得分:0)

找出问题所在。 不得不降低我的图像的分辨率。我猜想当分辨率过高时,缝合器会对过多的信息感到困惑。 此外,照片被提供给节目的顺序也很重要。我有时必须翻转订单。