Попробуйте добавить строку c = cv.WaitKey(10)
внизу вашего repeat()
метода.
В течение 10 мс пользователь ожидает ввода ключа. Даже если вы вообще не пользуетесь ключом, вставьте это. Я думаю, что просто необходима некоторая задержка, поэтому time.sleep(10)
также может работать.
Что касается индекса камеры, вы можете сделать что-то вроде этого:
for i in range(3):
capture = cv.CaptureFromCAM(i)
if capture: break
Здесь будет найден индекс первого «рабочего» устройства захвата, по крайней мере, для индексов от 0 до 2. Возможно, на вашем компьютере установлено несколько устройств, признанных правильным устройством захвата. Единственный известный мне способ подтвердить, что у вас есть право, - это вручную посмотреть на ваш свет. Может быть, получить изображение и проверить его свойства?
Чтобы добавить приглашение пользователя к процессу, вы можете привязать клавишу для переключения камер в цикле повторения:
import cv
cv.NamedWindow("w1", cv.CV_WINDOW_AUTOSIZE)
camera_index = 0
capture = cv.CaptureFromCAM(camera_index)
def repeat():
global capture #declare as globals since we are assigning to them now
global camera_index
frame = cv.QueryFrame(capture)
cv.ShowImage("w1", frame)
c = cv.WaitKey(10)
if(c=="n"): #in "n" key is pressed while the popup window is in focus
camera_index += 1 #try the next camera index
capture = cv.CaptureFromCAM(camera_index)
if not capture: #if the next camera index didn't work, reset to 0.
camera_index = 0
capture = cv.CaptureFromCAM(camera_index)
while True:
repeat()
отказ от ответственности: я не проверял это, поэтому он может содержать ошибки или просто не работать, но может дать вам хотя бы представление об обходном пути.