Получение текущего кадра с помощью OpenCV VideoCapture в Python

81
6

Я использую cv2.VideoCapture для чтения кадров видео-ссылки RTSP в python script. Функция .read() находится в цикле while, который выполняется один раз в секунду. Однако я не получаю из текущего потока самый последний кадр. Я получаю старые рамы, и таким образом нарастает отставание. Есть ли в любом случае, что я могу получить самые последние фреймы, а не более старые кадры, которые попали в объект VideoCapture?

спросил(а) 2015-10-19T21:58:00+03:00 5 лет назад
1
Решение
70

Я работаю с другом в хаке, делая то же самое. Мы не хотим использовать все фреймы. До сих пор мы обнаружили то же самое: grab() (или чтение) пытается получить все кадры, и я думаю, что с помощью rtp: он будет поддерживать буфер и упасть, если вы недостаточно отзывчивы.


Вместо чтения вы также можете использовать grab() и receive(). Сначала попросите фрейм. Прием читает его в память. Поэтому, если вы вызываете захват несколько раз, это будет эффективно пропускать их.


Нам это удалось:

#show some initial image
while True:
cv2.grab()
if cv2.waitKey(10):
im = cv2.receive()
# process
cv2.imshow...

Не производственный код, но...

ответил(а) 2017-05-05T22:06:00+03:00 3 года, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема