【问题标题】:CV2: "[ WARN:0] terminating async callback" when attempting to take a pictureCV2:尝试拍照时出现“[WARN:0] terminating async callback”
【发布时间】: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 应用程序的代码中使用了条件内外的网络摄像头。释放句柄时,不会发生错误。

标签: python image opencv cv2


【解决方案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】:
      1. 首先:添加cv2.destroyAllWindows()
      2. 第二个:你已经禁止的摄像头权限,然后检查一下。

      【讨论】:

        【解决方案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.
            猜你喜欢
            • 1970-01-01
            • 2019-10-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-07-22
            相关资源
            最近更新 更多