【问题标题】:How do i prevent a segmentation fault with opencv in python如何在 python 中使用 opencv 防止分段错误
【发布时间】:2021-12-20 09:05:57
【问题描述】:

我正在尝试在 ArchLinux 上使用 gnome 作为桌面环境,使用 opencv 和 python 3.9.7 重新生成一个简单的代码。我使用命令pip3 install --upgrade opencv-python 安装了opencv。我当前的代码如下所示。

import cv2
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)

while True:
    success, img = cap.read()
    cv2.imshow("Video", img)  # This is where the code fails
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

如果我删除imshow() 命令下面的所有内容,代码就会运行,但是当我添加该单行时,执行会失败并出现以下错误

Segmentation fault (core dumped)

似乎很多人都遇到过这个问题,但我还没有看到解决方案。有谁知道我该如何解决这个问题?

【问题讨论】:

  • 您必须对 VideoCapture 的创建和 cap.read 的结果进行错误检查。所有的代码示例都展示了如何做到这一点。这不是可选的。与 docs.opencv.org 合作。 -- 并且不要在 set() 调用中使用幻数。使用cv2.CAP_PROP_FRAME_WIDTH 和高度
  • 如果您在 Python 中遇到段错误,那么问题很可能出在底层库中,而不是在您的代码中。我认为您正在安装的预构建软件包可能存在一些不兼容性。代替你,我可能会尝试自己构建 OpenCV,看看效果是否更好。
  • @ChristophRackwitz 是的,完全同意。这段代码 sn-p 看起来很熟悉,虽然我不确定人们从哪里复制这个废话,但没有给出任何内容。 |不过,它不应该导致段错误。
  • @DanMašek 我不会说我只是不假思索地复制了这个例子。我确实访问了文档,但只找到了 C++ 中的示例,我不确定它们对 python 语法的适用程度。我必须知道存在某些东西才能知道我应该去寻找它。也就是说,我发现了错误。似乎 4.5.3.56 之后的每个 opencv-python 版本都为 Linux 用户和 MacOS 用户提出了这个问题。我降级了我的 opencv-python 库,现在一切正常。而且我确实找到了一个带有您提到的错误检查的python示例,并将在将来使用它。

标签: python python-3.x opencv


【解决方案1】:

经过一番挖掘,我发现对于 4.5.3.56 之后的 opencv-python 版本的 MacOS 和 Linux 用户来说,这是一个问题。我将我的 opencv-python 库 20 4.5.3.56 降级,现在一切正常。

【讨论】:

  • 与 wsl arch 有同样的问题,请问您在哪里找到了这些信息?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
  • 2018-09-11
相关资源
最近更新 更多