c++ - OpenCv 3d拼接全景图

标签 c++ opencv image-stitching

我有 7 张来自 gopro 的图像(装备中有 5 个相机,一个用于顶部,一个用于底部,它们都是 gopro 相机)。我想将所有这些图像拼接在一起以创建 3d 全景图。我已经能够使用 opencv stitching_detailed.cpp 在 Rig 中拼接 5 张图像。文件链接:

https://raw.githubusercontent.com/opencv/opencv/master/samples/cpp/stitching_detailed.cpp

但我不确定如何缝合顶部和底部(对我来说现在底部不是那么重要,但我必须对顶部做些什么)。知道如何做到这一点吗?如果我也可以使用相同的 stitching_detailed.cpp 来缝合顶部,请告诉我。

以下链接包含我正在使用的图像。它还包含我在 rig 中拼接图像得到的结果。

https://drive.google.com/folderview?id=0B_Bl8s2ePunQcnBaM3A4WDlDcXM&usp=sharing

最佳答案

因此,首先您需要了解 stitching_detailed.cpp 的工作原理。 1. 使用 SURF/ORB/SIFT 等方法在每个图像中检测特征关键点。然后对于每个图像对,找到最佳特征匹配并计算单应性矩阵并获得每对图像的内点数

(*finder)(img, features[i]); 


 BestOf2NearestMatcher matcher(try_cuda, match_conf);
 matcher(features, pairwise_matches);
  1. 所有这些对都被传递到 leaveBiggestComponent 以获得属于全景图的最大图像集。

  2. 相机参数或每张图像是根据上述获得的集合计算的,并完成变形和混合。

第 1 步将为每对查找单应性并生成一定数量的内点。第 2 步将删除所有置信度因子(内点数)小于阈值的图像对。由于 cam7 img 的特征非常少,并且几乎没有与任何其他图像重叠的区域,因此它会在 leavebiggestcomponent 步骤中被拒绝。

可以在这个链接看到features和mtaching(我用过orbfeatures)

https://drive.google.com/open?id=0B2wDitsftUG9QnhCWFIybENkbDA

我也没有改变图像大小,但我想稍微减小图像尺寸(可能减半)会产生更多的特征点

您可以做的是减少拍摄帧进行拼接的时间间隔。为了获得好的结果,图像之间必须至少有 40% 的重叠区域。

关于c++ - OpenCv 3d拼接全景图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39269798/

相关文章:

python - 如何将 reshape /展平的图像附加到Python列表而不消耗太多内存?

python - 如何在 OpenCV Python Stitcher 类中设置全景模式?

JAVA BoofCV 方法的 Android 替代方案

C++ -- float*** 回避

c++ - libavcodec:ffprobe 对使用 FFV1 编解码器编码的文件报告 "read_quant_table error"

c++ - 使用 Qt 检查键是否已关闭

c++ - 在 C++ 中交换多维数组

android - CvException warpAffine 旋转框架

c++ - 如何避免在 C++ 项目(XCode)中的其他机器上加载动态库?

python - 大范围图像拼接