【问题标题】:How to use OpenCV Stitcher class with Python?如何在 Python 中使用 OpenCV Stitcher 类?
【发布时间】:2015-12-18 19:49:54
【问题描述】:

我正在尝试将 OpenCV Stitcher 类与 Python 一起使用,但没有成功。我的代码是:

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

我得到一个带有 (1, None) 的元组。

按照 C++ 示例,我尝试将一个 numpy 数组作为第二个参数传递给stitch(),但没有成功。

【问题讨论】:

  • 这是一个非常有趣的问题。我没有找到这个函数的任何 python 文档,虽然它在那里。

标签: python opencv


【解决方案1】:

你用对了,进程由于某种原因失败了。

结果元组的第一个值是错误码,0表示成功。这里你得到了 1,这意味着,根据stitching.hpp,这个过程需要更多的图像。

enum Status
{
    OK = 0,
    ERR_NEED_MORE_IMGS = 1,
    ERR_HOMOGRAPHY_EST_FAIL = 2,
    ERR_CAMERA_PARAMS_ADJUST_FAIL = 3
};

ERR_NEED_MORE_IMGS 通常表示您的图像中没有足够的关键点。

如果您需要更多关于错误发生原因的详细信息,您可以切换到 C++ 并详细调试该过程。


编辑:提供工作示例

与 OP 相同的代码,只是添加了结果保存和绝对路径。

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])

这些图片:(我希望你喜欢考拉)

foo.png

bar.png

结果.jpg

【讨论】:

  • Gwen,感谢您对这个问题感兴趣。我们想要一个python解决方案,你能用你提供的图像举一个python的例子吗?
  • 对我还不起作用,用上面的单独答案证明了我的问题。你能帮忙吗?
  • 我无法评论您的答案(没有足够的声誉......)。 OpenCV 3.0+ 中有一个错误。它仍然很不清楚,但似乎与 OpenCL 集成有关(例如,参见 this bug report)。您需要在没有 OpenCL 支持的情况下重建 OpenCV,并且可能在 cv2.cpp (//CV_Error(Error::StsAssert, "The data should normally be NULL!");) 的第 163 行注释
  • @tfv 我也在使用 python 2.7 和 OpenCV 3.1.0。
  • 那是考拉熊!此外,导致第 163 行错误的错误似乎已在 OpenCV 3.3.0 中得到解决。感谢您写得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多