CV2:尝试拍照时出现“[WARN:0] terminating async callback”

Posted

技术标签:

【中文标题】CV2:尝试拍照时出现“[WARN:0] terminating async callback”【英文标题】:CV2: "[ WARN:0] terminating async callback" when attempting to take a picture 【发布时间】:2019-05-22 04:01:26 【问题描述】:

我正在尝试使用 python 从默认 carmera 拍照,为此我使用 openCV(来自 python shell 的import cv2)。但是,当我尝试禁用相机时,它会关闭但出现错误[ 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

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

【问题讨论】:

对于正在寻找原因的人来说,正如 Aprajita Verma 所提到的,网络摄像头的句柄没有被释放,这会导致错误。我在 OCR 应用程序的代码中使用了条件内外的网络摄像头。释放句柄时,不会发生错误。 【参考方案1】:

嘿伙计们找到了解决方案 pip install opencv-contrib-python==3.4.7.28 尝试这样我们必须特别说明版本尝试较小的版本我的是 4.x 所以我做了并且没有弹出错误

【讨论】:

【参考方案2】:

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

【讨论】:

此解决方案有效,但改为定义端口cv2.VideoCapture(0, cv2.CAP_DSHOW) 在 Windows 上使用 cv2.CAP_DSHOW 会消除警告,但会降低帧速率从 30fps 到 7fps。 正确答案,不知道为什么,但是提到第二个参数可以解决警告 天哪!非常感谢! @PeterWood Windows 上的默认设置应该没问题(CAP_MSMF),假设你的 Win10 是最新的。在 Win10 20H2 上,我没有遇到任何问题(该警告仅表示流结束)。我团队中唯一有问题的人是使用过时的 Windows 版本。这是有道理的,因为 DSHOW 曾经是默认设置,而 MSMF 正在慢慢取代 DSHOW【参考方案3】:
camera = cv2.VideoCapture(camera_port, cv2.CAP_DSHOW) # Added cv2.CAP_DSHOW
return_value, image = camera.read()
cv2.imwrite("image.png", image)
camera.release()
cv2.destroyAllWindows() # Handles the releasing of the camera accordingly

【讨论】:

【参考方案4】:
    首先:添加cv2.destroyAllWindows() 第二个:你已经禁止的摄像头权限,然后检查一下。

【讨论】:

【参考方案5】:

它对我有用 Sumit Kumar


camera_port = 0
#camera = cv2.VideoCapture(camera_port)
camera = cv2.VideoCapture(camera_port,cv2.CAP_DSHOW)
# Check if the webcam is opened correctly
if not camera.isOpened():
    raise IOError("Cannot open webcam")

return_value, image = camera.read()
print("We take a picture of you, check the folder")
cv2.imwrite("image.png", image)

camera.release() # Error is here
cv2.destroyAllWindows()

【讨论】:

【参考方案6】:
camera = cv2.VideoCapture(camera_port,cv2.CAP_DSHOW)

cv2.destroyAllWindows()

【讨论】:

使用 cv2.CAP_DSHOW 可以消除警告,但在 Windows 上将帧速率从 30fps 降低到 7fps【参考方案7】:

我这样做了,之后我没有看到那个警告。(仅适用于 Windows 操作系统)

打开 cmd 并输入:

setx OPENCV_VIDEOIO_PRIORITY_MSMF 0

【讨论】:

【参考方案8】:

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

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

camera.release()
cv2.destroyAllWindows()

我希望这会有所帮助!

【讨论】:

在带有 Python 3.8 和 OpenCV 4.2 的 Windows 10 上,这并不能解决问题。该警告也会显示在 OpenCV 示例程序上,例如samples/python/video.py.

以上是关于CV2:尝试拍照时出现“[WARN:0] terminating async callback”的主要内容,如果未能解决你的问题,请参考以下文章

使用修改的 flashMode 属性拍照时出现 React-Native-Camera 错误

尝试查找棋盘角时出现opencv python错误

拍照时出现 FileUriExposedException

在 Jetson Nano 上安装 OpenCV 4.1.2 时出现问题。导入 cv2,没有名为“cv2”的模块

为啥在 Jupyter 笔记本中调用 cv2.imshow() 时出现无响应窗口

使用 AVCapturePhotoOutput 使用闪光灯拍照时出现问题