Камера остается включенной после уничтожения объекта, как выключить светодиод камеры в OpenCV 4.1.2.30? - PullRequest
1 голос
/ 31 января 2020

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

Я даже пытался написать функции .release() и .VideoCaptureRelease(), но все прошло Напрасно.

Используемая версия Python: 3.6.9, Linux (Ubuntu 18.04), PyEharm 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()

Буду признателен за любые предложения или помощь.

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

Ответы [ 2 ]

1 голос
/ 31 января 2020

Эта проблема была впервые сообщена здесь , и, похоже, она вызвана проблемой в MSMF-захвате бэкэнда .

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

export OPENCV_VIDEOIO_PRIORITY_MSMF=0
0 голосов
/ 31 января 2020

Вы можете отпустить кулачок после оператора if и сразу после этого войти в бесконечное время, пока l oop, чтобы держать экран openCV открытым.

Кроме того, вы можете добавить условие с помощью waitkey, чтобы разбить l oop и затем закрыть окно.

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