Камера остается включенной после разрушения объекта, как выключить светодиод камеры в OpenCV 4.1.2.30?

Светодиод моей камеры не выключается, даже когда процесс завершен. Я просто создал функцию для захвата изображения, а затем камеру нужно выключить, но этого не происходит.

Я даже пробовал писать .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 неожиданно светодиод постоянно горит после использования камеры. Вот код моей небольшой задачи:

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()

Любые предложения или помощь будут оценены.

заранее спасибо


person S...R... T    schedule 31.01.2020    source источник


Ответы (2)


Об этой проблеме впервые было сообщено здесь, и, похоже, она вызвана проблемой в < em> Серверная часть захвата MSMF.

Некоторые люди сообщают, что временное исправление состоит в том, чтобы установить для следующей переменной среды значение 0 перед запуском скрипта:

export OPENCV_VIDEOIO_PRIORITY_MSMF=0
person karlphillip    schedule 31.01.2020

Вы можете отпустить камеру после оператора if и сразу после этого войти в бесконечный цикл while, чтобы экран 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()
person Carlos Olcina    schedule 31.01.2020