【问题标题】:Camera stays on after object is destroyed, how to turn off the camera LED in OpenCV 4.1.2.30?物体被破坏后相机保持开启状态,如何在 OpenCV 4.1.2.30 中关闭相机 LED?
【发布时间】:2020-05-16 22:08:12
【问题描述】:

即使该过程完成,我的相机的 LED 也不会关闭。我只是创建了一个函数来捕获图像,然后必须关闭相机,但这并没有发生。

我什至尝试过编写.release() 函数和.VideoCaptureRelease() 函数,但都是徒劳的。

我使用的 Python 版本是 3.6.9,在 Linux (Ubuntu 18.04) 上,在 PyCharm IDE 19.3.2 上。在所有 openCV 版本之上是 4.1.2.30

openCV 4.1.0.25 没有出现该问题!

无论如何,在最新版本的 OpenCV 中,出乎意料的是,使用相机后 LED 会永久亮起。这是我的小任务的代码:

from cv2 import *
import os


class Camera:

    def capture_pic():
        cam = VideoCapture(0)
        s, img = cam.read()
        if s:
            namedWindow("cam-test", flags=WINDOW_AUTOSIZE)
            imshow("cam-test", img)
            waitKey(0)
            destroyWindow("cam-test")

            imwrite("test_pic.jpg", img)  # save image
            imshow('test_pic.jpg', img)
            waitKey(0)
            destroyAllWindows()
            cam.release()   # Used but no results

Camera.capture_pic()

任何建议或帮助将不胜感激。

提前致谢

【问题讨论】:

    标签: python-3.x opencv pycharm ubuntu-18.04


    【解决方案1】:

    这个问题是first reported here,它似乎是由 MSMF 捕获后端中的问题引起的

    有人报告说临时解决方法是在运行脚本之前将以下环境变量设置为0

    export OPENCV_VIDEOIO_PRIORITY_MSMF=0
    

    【讨论】:

      【解决方案2】:

      您可以在 if 语句之后释放 cam,然后进入无限循环以保持 openCV 屏幕打开。

      此外,您可以添加带有waitkey 的条件来中断循环,然后关闭窗口。

      from cv2 import *
      import os
      
      
      class Camera:
      
          def capture_pic():
              cam = VideoCapture(0)
              s, img = cam.read()
              if s:
                  namedWindow("cam-test", flags=WINDOW_AUTOSIZE)
                  imshow("cam-test", img)
                  destroyWindow("cam-test")
                  imwrite("test_pic.jpg", img)  # save image
                  cv2.imshow('test_pic.jpg', img)
              cam.release()   # release the cam just after showing your image.
              while True:
                  if cv2.waitKey(1) & 0xFF == ord('q'):
                      destroyAllWindows()
                      break
      
      
      Camera.capture_pic()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-30
        • 1970-01-01
        • 2013-04-07
        相关资源
        最近更新 更多