【问题标题】:How to Set Panorama Mode in OpenCV Python Stitcher Class?如何在 OpenCV Python Stitcher 类中设置全景模式?
【发布时间】:2018-05-30 02:31:59
【问题描述】:

基于this question/answer,我一直在尝试在python中使用OpenCV的Stitcher类。我的代码与答案中的基本相同。

import cv2

stitcher = cv2.createStitcher(False)
foo = cv2.imread("D:/foo.png")
bar = cv2.imread("D:/bar.png")
result = stitcher.stitch((foo,bar))

cv2.imwrite("D:/result.jpg", result[1])

问题是我想将模式从全景更改为扫描。 In the c++ documentation, create 方法有一个模式的输入。然而,Python 中的 createStitcher 类只接受一个输入——是否尝试使用 gpu。有没有办法在 Python 中指定模式?

当我尝试 createStitcherScans 时,我得到一个错误

stitcher = cv2.createStitcherScans(False)
"AttributeError: 'module' object has no attribute 'createStitcherScans'"

我确实找到了似乎相关的this GitHub issue,因为 Python 绑定缺少一些东西。但这超出了我的想象,我不确定如何编辑 opencv 代码以正确执行此操作。我尝试将其添加到stitching.hpp:

typedef Stitcher::Mode Mode;

但是什么也没发生。 createStitcher(1, False) 仍然给我属性错误。任何帮助将不胜感激。

【问题讨论】:

  • 这对我来说也很有趣,你找到解决方案了吗?

标签: python opencv image-stitching


【解决方案1】:

这已在 Open CV 4 中得到解决(至少在我正在运行的 4.1.0 中)。您现在可以将mode 指定为cv2.Stitcher.create 的关键字参数:

stitcher = cv2.Stitcher.create(mode = 1)

似乎尚未移植不同模式的枚举标签,但它适用于数字。 PANORAMA0SCANS1,定义为 here

注意,如果您使用的是 Google Colab,那么您可以像这样更改 Open CV 的版本:

!pip3 install opencv-python==4.1.0.25

【讨论】:

    【解决方案2】:

    我也有同样的问题。查看documentation 之后,看起来python 包装函数没有映射到create(),而是没有模式输入的createDefault(),只有try_use_gpu 输入。我没有使用包装器的经验,但可以尝试通过阅读 OpenCV's info on how the python bindings work 来弄清楚。

    根据我迄今为止在 python 中使用缝合的工作,似乎 createDefault() 在 PANORAMA 模式下创建了一个缝合器,因为它正在扭曲我的图像。我不能将工作时间用于查看包装器,但如果我最终花费个人时间来修复它,我将在此处更新我的答案。

    【讨论】:

      【解决方案3】:

      在GitHub上查看Python的官方测试代码samples/python/stitching.py,可以使用Stitcher_PANORAMAStitcher_SCANS。您可以随时检查任何模块的测试代码,例如 modules/stitching/misc/python/test 在这种情况下。

      stitcher = cv.Stitcher.create(cv.Stitcher_PANORAMA)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-03
        • 1970-01-01
        相关资源
        最近更新 更多