Я пытаюсь перейти к определенному кадру, установив свойство CV_CAP_PROP_POS_FRAMES
, а затем прочитав этот кадр следующим образом:
cvSetCaptureProperty( input_video, CV_CAP_PROP_POS_FRAMES, current_frame );
frame = cvQueryFrame( input_video );
Проблема, с которой я сталкиваюсь, заключается в том, что OpenCV 2.1 возвращает один и тот же кадр для 12 последовательных значений current_frame
, тогда как я хочу читать каждый отдельный кадр, а не только ключевые кадры. Может кто-нибудь, пожалуйста, скажите мне, что случилось?
Я провел некоторое исследование и выяснил, что проблема вызвана алгоритмом декомпрессии.
MPEG-подобные алгоритмы (включая HD и т.д.) не сжимают каждый кадр отдельно, а время от времени сохраняют ключевой кадр, а затем только различия между последним кадром и последующими кадрами.
Проблема, о которой вы сообщили, вызвана тем, что при выборе фрейма декодер (ffmpeg, скорее всего) автоматически переходит к следующему ключевому кадру.
Итак, есть ли способ обойти это? Я не хочу только ключевые кадры, но каждый отдельный кадр.