CV2:尝试拍照时“[WARN:0] 终止异步回调”

Ele*_*ant 15 python image cv2

我正在尝试使用 python 从默认的 carmera 拍照,为此我使用 openCV(import cv2来自 python shell)。但是,当我尝试禁用相机时,它会关闭但出现错误[ WARN:0] terminating async callback

这是我试图运行的代码:

import cv2

camera_port = 0
camera = cv2.VideoCapture(camera_port)
return_value, image = camera.read()
cv2.imwrite("image.png", image)

camera.release() # Error is here
Run Code Online (Sandbox Code Playgroud)

代码输出所需的结果 - 它需要保存图像,但我不明白为什么会出现错误消息或如何删除它

小智 26

我有同样的警告。只需将该行修改camera = cv2.VideoCapture(camera_port)camera = cv2.VideoCapture(camera_port, cv2.CAP_DSHOW)并添加cv2.destroyAllWindows()为代码的最后一行。

  • 该解决方案有效,但定义端口而不是“cv2.VideoCapture(0, cv2.CAP_DSHOW)” (3认同)
  • 使用“cv2.CAP_DSHOW”可以消除警告,但在 Windows 上将帧速率从 30fps 降低到 7fps。 (3认同)
  • @PeterWood Windows 上的默认设置应该没问题(“CAP_MSMF”),假设您的 Win10 是最新的。在 Win10 20H2 上,我没有遇到任何问题(该警告仅意味着流结束)。我的团队中唯一遇到问题的人是使用过时版本的 Windows。这是有道理的,因为 DSHOW 曾经是默认设置,而 MSMF 正在慢慢取代 DSHOW (2认同)

小智 5

它可能会显示警告,因为您没有松开网络摄像头的手柄。

尝试将此添加到代码的末尾

camera.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助!

  • 在装有 Python 3.8 和 OpenCV 4.2 的 Windows 10 上,这并不能解决问题。该警告也会显示在 OpenCV 示例程序中,例如“samples/python/video.py”。 (4认同)

小智 5

camera = cv2.VideoCapture(camera_port,cv2.CAP_DSHOW)

cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)