Как использовать cv2.CAP_PROP_POS_FRAMES для извлечения видеокадра?

Я работаю над обработкой видео, и один из шагов, которые мне нужно выполнить, - извлечь конкретный кадр из видео.

cap = cv2.VideoCapture(videoFile)
for frame in range(startFrame, endFrame): 
    cap.set(cv2.CAP_PROP_POS_FRAMES, frame)       
    print frame
    position = cap.get(cv2.CAP_PROP_POS_FRAMES)
    print position

В идеале рама и положение должны быть одинаковыми. Это изначально верно. Однако после 2 или 3 циклов позиция становится -2.04963823041e+15. Я очень смущен этим. Я запускаю это на сервере amazonaws с Anaconda и OpenCV 3.

1 ответ

Это старый вопрос, но я оставлю свои наблюдения, так как он был в первых числах результатов, когда я искал подсказки.

Причина, по которой я столкнулся с этой проблемой, вероятно, отличалась от того, что было для OP, но в моем случае у меня было странное поведение, когда переменная среды была установлена ​​на . Я использовал ускорение графического процессора для декодирования кадров и не знал, что это вызовет проблемы при перемотке в произвольную позицию в файле.

Интересно, что перемотка будет работать для произвольно малого числа кадров, например, при работе с файлом 7000 кадров она будет работать для перемотки на ~ 2000 кадров, но не будет надежно работать при перемотке на кадр выше 4000.

Как только я удалил переменную окружения, перемотка работает надежно для любого номера кадра. И теперь на перемотку уходит меньше времени, чем при включенном ускорении на GPU ...

Другие вопросы по тегам