Скрипт OpenCV для веб-камеры бесконечно выключает и включает веб-камеры

Я написал скрипт для отображения карты глубины с моих веб-камер:

cam_a = int(sys.argv[1])
cam_b = int(sys.argv[2])


while True:
    imgl = cv2.VideoCapture(cam_a).read()[1]
    imgL = cv2.cvtColor(imgl, cv2.COLOR_BGR2GRAY)

    imgr = cv2.VideoCapture(cam_b).read()[1]
    imgR = cv2.cvtColor(imgr, cv2.COLOR_BGR2GRAY)


    stereo = cv2.StereoBM(cv2.STEREO_BM_BASIC_PRESET,ndisparities=16, SADWindowSize=15)
    disparity = stereo.compute(imgL,imgR)

    cv2.imshow('Disparity', disparity)

И хотя он не выдает ошибку, он бесконечно мигает обоими веб-камерами. Я беспокоюсь, что это может сломать мои веб-камеры, как я могу это остановить?

РЕДАКТИРОВАТЬ

Итак, я изменил его, чтобы он показывал только одну камеру как обычное видео:

while True:
    imgl = cv2.VideoCapture(cam_a).read()[1]
    imgL = cv2.cvtColor(imgl, cv2.COLOR_BGR2GRAY)

    #imgr = cv2.VideoCapture(cam_b).read()[1]
    #imgR = cv2.cvtColor(imgr, cv2.COLOR_BGR2GRAY)


    #stereo = cv2.StereoBM(cv2.STEREO_BM_BASIC_PRESET,ndisparities=16, SADWindowSize=15)
    #disparity = stereo.compute(imgL,imgR)

    cv2.imshow('Disparity', imgL)
    cv2.waitKey(10)

И все равно просто мигает камера вкл и выкл. Я не уверен, что изменить здесь.

2 ответа

Решение

Есть проблема. Вы постоянно запускаете объект видеозахвата в цикле while. Вы должны использовать один экземпляр, инициированный до цикла while, и получить доступ к изображению, используя этот экземпляр видеозахвата. Посмотрите этот пример и измените свой код соответствующим образом, надеюсь, он исправит ваши проблемы:

import cv2
camera = cv2.VideoCapture(0)
while True:
    return_value,image = camera.read()
    gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    cv2.imshow('image',gray)
    if cv2.waitKey(1)& 0xFF == ord('s'):
        cv2.imwrite('test.jpg',image)
        break
camera.release()
cv2.destroyAllWindows()

Все, что вам нужно добавить задержку после imshow:

cv2.waitKey(10)
Другие вопросы по тегам