【问题标题】:cv2 error while in execution Bad file descriptor执行时出现 cv2 错误错误的文件描述符
【发布时间】:2021-03-17 08:33:44
【问题描述】:

我正在循环运行一些 Python 脚本(但不是那么快)。

示例:

import time
import cv2
stream = cv2.VideoCapture(0)
while True:
    ret,frame = stream.read()
    cv2.imshow("Frame",frame)
    cv2.waitKey(1)
    time.sleep(10)

执行几分钟后,我收到此错误:

E1205 11:19:12.803174714   32302 backup_poller.cc:132]       Run client channel backup poller: {"created":"@1607177952.802346313","description":"pollset_work","file":"src/core/lib/iomgr/ev_epollex_linux.cc","file_line":324,"referenced_errors":[{"created":"@1607177952.802226759","description":"Bad file descriptor","errno":9,"file":"src/core/lib/iomgr/ev_epollex_linux.cc","file_line":954,"os_error":"Bad file descriptor","syscall":"epoll_wait"}]}

有人知道这是什么吗?我查看了 Google,但没有找到任何好的解决方案。

【问题讨论】:

  • 代码对我来说很好用。也许您应该将time.sleep(10) 减少到time.sleep(1) 并重试。

标签: python linux opencv


【解决方案1】:

创建 VideoCapture 后,始终测试 stream.isOpened()。如果为 False,则无法对视频执行任何操作。

在ret, frame = stream.read() 之后,始终测试 ret 是否为 True。如果为False,则视频已结束,您需要结束循环。

我还建议不要只睡十秒钟。在此期间,GUI 事件循环不会运行(因为您没有运行 waitKey),这会使 imshow 窗口无响应,您的操作系统可能会决定终止该进程。

请改用 waitKey(10000)。检查 waitKey() 是否等待了完整的时间间隔。由于关键事件,它可能会提前返回。你可以接受,或者在剩余时间重复waitKey。

无论您是否阅读它们,相机都会定期生成帧。如果您不阅读它们,它们就会排队。驱动程序不会喜欢这样,可能会决定向您抛出错误。

【讨论】:

  • 我如你所说改变了。但运行我的代码 7 分钟后出现同样的错误 :(
  • 你很快。我编辑了我的答案一两次(我想)。看看我关于更长 waitKey 间隔的建议是否有帮助。
  • 我想我现在更了解您的问题了。请在最后查看我的更新答案。
  • 好的。我现在将测试并在这里报告。谢谢。
  • 对不起。它再次发生。我在 5 分钟后接受了 imshow 和 waitkey 以及同样的错误]
猜你喜欢
  • 1970-01-01
  • 2021-03-12
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 2019-02-26
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
相关资源
最近更新 更多