Как обеспечить чтение и обработку всех кадров с помощью OpenCV - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь использовать 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

1 Ответ

0 голосов
/ 22 ноября 2018

По сути, вы просто загружаете видео и дисплей, поэтому нет никаких причин, по которым вы получаете такой же низкий fps, кроме того, что вы используете Macbook с экраном Retina.Возможно, причина в медленном отображении видео, потому что экран Retina имеет намного больше пикселей, и может потребоваться время, чтобы механизм компоновки отобразил ваше изображение на экране.Я предлагаю использовать внешний экран.

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