【问题标题】:Simple image stitching issue using opencv and python使用opencv和python的简单图像拼接问题
【发布时间】:2019-03-29 06:20:46
【问题描述】:

我目前正在尝试使用 OpenCV 构建一个能够将多个图像拼接在一起的简单图像拼接器。我写(复制)了这段简单的代码作为我的起点。

现在,如果我选择缝合 foo、doo 和 roo,它缝合起来没问题。但是在我引入 eoo 的那一刻,出现了一个问题,我得到了这个错误。

问题是我什至找不到任何关于这个错误意味着什么的迹象?我认为这可能是内存问题,但即使我缝合了 3 张包含 eoo 的图像,我仍然会遇到问题。

我使用的图片是4.jpg5.jpg6.jpg7.jpg

报错如下

[ INFO:0] Initialize OpenCL runtime...
OpenCV Error: Insufficient memory (Failed to allocate 1612986244 bytes) in OutOfMemoryError, file /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/core/src/alloc.cpp, line 55
OpenCV Error: Assertion failed (u != 0) in create, file /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/core/src/matrix.cpp, line 436
Traceback (most recent call last):
  File "new.py", line 10, in <module>
    result = stitcher.stitch((foo,doo,eoo))
cv2.error: /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/core/src/matrix.cpp:436: error: (-215) u != 0 in function create
import cv2

stitcher = cv2.createStitcher(False)

foo = cv2.imread("4.jpg")
doo = cv2.imread("5.jpg")
eoo = cv2.imread("6.jpg")
roo = cv2.imread("7.jpg")

result = stitcher.stitch((foo,doo,eoo))

cv2.imshow("camera",result[1])
cv2.waitKey(10000)

【问题讨论】:

  • 您没有告诉我们关于图像 6.jpg 的任何细节,但您可以在错误消息中看到它告诉您 OpenCV 内存不足。如果您在运行应用程序时观察内存使用情况,会发生什么?
  • 我现在将发布图像(一旦我发现在这里发布图像的约定是什么)另外,我一直在我的树莓派(1 GB RAM)上运行它,它永远不会少于 200mb ram 离开。当我现在在我的 8gb ram pc 上测试它时,它可能使用 500mb 的 ram,并且当错误出现时仍然有许多 GB 可用。可能是我的图像有点旋转吗?据我了解,这仅用于拼接全景图
  • 图片现在在原始问题中

标签: python opencv


【解决方案1】:

一个可能有帮助的潜在变化是使用 OpenCV 的 GPU 支持来提高图像拼接管道的性能 cv2.createStitcher(True)。我无法复制您的错误消息,因为使用任何图像组合创建了成功的拼接图像。

import cv2

stitcher = cv2.createStitcher(True)

foo = cv2.imread("4.jpg")
doo = cv2.imread("5.jpg")
eoo = cv2.imread("6.jpg")
roo = cv2.imread("7.jpg")

result = stitcher.stitch((foo,doo,eoo,roo))

cv2.imshow("camera",result[1])
cv2.waitKey(0)

【讨论】:

  • 即使将 GPU 标志设置为 true,我仍然会收到错误消息。我的 Windows 机器和 Raspberry pi 上的错误也不同,有趣,似乎一些系统相关问题在这里显露出来。 Windows PC 上的错误 --> Traceback(最近一次调用最后一次):文件“new.py”,第 10 行,在 结果=stitcher.stitch((foo,doo,eoo,roo)) cv2.error: OpenCV (3.4.2) C:\projects\opencv-python\opencv\modules\core\src\matri x.cpp:367: 错误: (-215:Assertion failed) u != 0 in function 'cv::Mat: :创建'
  • PI->[INFO:0] 初始化 OpenCL 运行时.. OpenCV 错误:OutOfMemoryError 中的内存不足(无法分配 24440442 字节),文件 /tmp/binarydeb/ros-kinetic-opencv3-3.3。 1/modules/core/src/alloc.cpp,第 55 行 OpenCV 错误:创建时断言失败(u!= 0),文件 /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/core/src/ umatrix.cpp,第 383 行 Traceback(最近一次调用最后一次)文件“new.py”,第 10 行,在 结果=stitcher.stitch((foo,doo,eoo,roo)) cv2.error: /tmp/ binarydeb/ros-kinetic-opencv3 3.3.1/modules/core/src/umatrix.cpp:383: error: (-215) u != 0 in function create
  • 有趣。两台机器上没有“eoo”的缝合是否有效?也许你的 OpenCV 版本已经过时了。尝试使用 'pip install --upgrade opencv-python` 更新它
  • 太好了,我成功了!这就是我所做的。 -> 我将openCV升级到版本4。然后stitcher函数变成“stitcher = cv2.Stitcher.create(True)”然后我得到一个工作版本!谢谢
  • 我安装了opencv-python-4.1.0.25,但是当我使用import cv2 时,它使用OpenCV(3.4.2)。如何更改 cv2 的版本?
猜你喜欢
  • 2021-10-03
  • 2011-12-26
  • 1970-01-01
  • 2015-04-20
  • 2020-03-10
  • 2021-05-30
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多