Я хочу воспроизвести видео, используя OpenCV для Python. Идея состоит в том, чтобы видео прогрессировало, когда пользователь нажимал кнопку, и делало паузу, когда они этого не делают. Код выглядит примерно так:
import cv2
source = cv2.VideoCapture(r"path/to/video")
while source.isOpened():
ok, frame = source.read()
if not ok:
break
cv2.imshow('video', frame)
if cv2.waitKey(0) & 0xff == ord('q'):
break
cv2.destroyAllWindows()
Это работало нормально и хорошо, пока я не попробовал это на видео 4K. Когда я это сделал, видео, казалось, зависало до тех пор, пока ключ не был выпущен, и тогда был показан только последний кадр. Мне удалось это исправить с помощью:
import cv2
source = cv2.VideoCapture(r"path/to/video")
while source.isOpened():
ok, frame = source.read()
if not ok:
break
cv2.imshow('video', frame)
if cv2.waitKey(0) & 0xff == ord('q'):
break
cv2.waitKey(1) # <-- added this
cv2.destroyAllWindows()
- Почему это происходит? Почему waitKey (0) не обновляет окно, а waitKey (1) делает? И почему только когда я играю 4K видео?
- Есть ли способ заставить изображение обновиться без вызова waitKey (1)?