Скрипт 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)