Как заставить cv2.imshow () показывать кадры из списка? - PullRequest
1 голос
/ 24 января 2020

Я пытаюсь сохранить последние 50 кадров из моей веб-камеры в список, а затем воспроизвести эти кадры. Когда я пытаюсь отобразить рамку, окно дисплея становится серым и говорит, что оно не отвечает. Если я покажу рамку в то время, как l oop, она отобразится, но если я попытаюсь показать кадры из списка, я сохранил их в описанной выше проблеме. Это код, который я запускаю.

cap = cv2.VideoCapture(0)
image_list = []
count = 0
while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    image_list.append(frame)

    #Display the resulting frame
    #cv2.imshow('frame',frame)   <---  this will show me my live frame by frame capture

    if count >= 50:
        break

    count += 1

# When everything is done, release the capture
cap.release()

for image in image_list:  
    cv2.imshow("frame", image)
    sleep(1)

1 Ответ

2 голосов
/ 24 января 2020

Если вы не используете правильный интерфейс пользователя Framerwork, такой как tkinter или Qt, вам придется периодически вызывать

cv2.waitKey(500)

, поскольку это единственный способ для компонента High gui OpenCv обрабатывать события (и обновить дисплей). В противном случае максимум gui просто «зависает».

for image in image_list:  
    cv2.imshow("frame", image)
    cv2.waitKey(500)

Выдержка из документов :

Примечание

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...