Я пытаюсь использовать OpenCV для загрузки видеофайла или доступа к видеопотоку с веб-камеры, но я не могу получить доступ ко всем кадрам.
Видеофайл записан с частотой кадров 60, но в моем кодеЯ могу получить доступ только к нескольким кадрам в секунду.Я пытался использовать резьбовую версию OpenCV, imutils
.Это работает лучше, но я все еще не могу получить доступ к полным кадрам.
В своем коде ниже я использую потоковую версию видео-ридера, чтобы загрузить видеофайл и изменить его размер до меньшего размера, чтобы уменьшить требуемую вычислительную мощность.
После того, как кадр будет успешно захвачен, я сделаю некоторую работу по обработке изображений (в будущем).Но теперь, даже с этим шаблоном, я могу прочитать не более нескольких (более 10) кадров, и результаты заикаются.Есть ли способ решить эту проблему?
import cv2
from imutils import resize
from imutils.video import VideoStream
vs = VideoStream(src="./video.MOV").start()
while True:
frame = vs.read()
if frame is not None:
frame = resize(frame, 800)
# some heavy analytics work
cv2.imshow("Frame", frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cv2.destroyAllWindows()
vs.stop()
Эксперимент
Я провел эксперимент, чтобы вычислить количество загруженных кадров и среднее время, затрачиваемое на каждую функцию imshow
и на моем iMac, и на машине с Ubuntu Intel Core i5-7400 @ 3,00 ГГц работает с монитором 1080p.
Видео (h264) имеет продолжительность 1:03 мин и размер 185,7 МБ.
iMac может загрузить только 414 кадров, в то время как машина Ubuntu может загрузить всего 2826 кадров.
Среднее время, необходимое для функции imshow
для обеих машин: 0.0003s