【发布时间】: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