【问题标题】:Combine two overlapping videos frame by frame to form a single frame将两个重叠的视频逐帧组合成一帧
【发布时间】:2018-04-04 16:47:18
【问题描述】:

我从 2 个独立的摄像机获取视频输入,输出视频之间有一些重叠区域。我已经尝试了一个水平组合视频输出的代码。这是该代码的链接:

https://github.com/rajatsaxena/NeuroscienceLab/blob/master/positiontracking/combinevid.py

直观地解释问题:

红色部分表示两个图像帧之间的重叠区域。我需要输出看起来像第二张图像,第一帧为蓝色,第二帧为绿色(如第三幅图所示)

我能想到但无法实施的解决方案是,使用 SIFT/SURF 从两帧中找出最大距离关键点,然后完全获取第一个视频帧,然后从第二个视频帧中选择非重叠区域并水平组合他们得到拼接的输出。

让我知道任何其他可能的解决方案。谢谢!

【问题讨论】:

    标签: python opencv video video-capture opencv-stitching


    【解决方案1】:

    我在一小时前阅读了这篇文章。我尝试了一些非常简单的方法。不完美,但在某些情况下应该可以正常工作。例如,如果您将两个摄像头并排放置在一个框架上。

    我从手机中拍摄了 2 张图片(彩色图像)。程序从两个源图像中选择矩形区域并调整大小结束提取此 roi 矩形。想法是通过归一化相关性找到“最佳”重叠的 Rect 区域。

    M1 和 M2 是要比较的 mat roi, matchTemplate(M1, M2, res, TM_CCOEFF_NORMED);

    之后,我发现这个重叠的 Rect 使用它来裁剪源图像并通过 hconcat() 函数组合在一起。

    我的代码是用 C++ 编写的,但在 python 中复制它真的很简单。它不是最好的解决方案,而是最简单的解决方案之一。如果您的相机固定在它们之间的稳定位置。我认为这是一个很好的解决方案。 我手里拿着手机:)

    您也可以在视频上使用这种简单的方法。速度仅取决于您比较的矩形候选者的数量。

    您可以通过智能区域来改进这一点以比较选择。

    另外,我正在考虑使用光流的另一个想法,即同时将来自相机的图像放在彼此后面进行排序。从一张图像中可能的重叠区域中提取好的特征以在第二张图像的区域中跟踪和找到它们。

    Surf 和 sift 对此非常有用,但这是我心中最简单的想法。

    代码在这里Code

    【讨论】:

    猜你喜欢
    • 2023-03-20
    • 2016-01-04
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多