2015-11-12 3 views
1

У меня есть видео и у меня есть важные времена в этом видео Например:Получить кадр из видео по времени (OpenCV)

"frameTime1": "00:00:01.00" 
    "frameTime2": "00:00:02.50" 
    "frameTime2": "00:00:03.99" 
    . 
    . 
    . 

Я получаю FPS, и я получаю totalFrameCount

Если я хочу, чтобы получить кадры в это время, например, кадр, который происходит в это время «frameTime2»: «00: 00: 02,50» я сделаю следующий код

FrameIndex = (Time*FPS)/1000; //1000 Because 1 second = 100 milli second 

В этом случае 00: 00: 02,50 = 2500 милли второй и FPS = 29 Так FRAMEINDEX в этом случае 72,5, в этом случае я буду выбирать либо frameNO: 72 или 73, но я чувствую, что это недостаточно точное, любое лучшее решение?

Что такое best и Точный Способ для этого?

+1

Я думаю, что 1 секунда 1000 мс –

+0

да, конечно спасибо;). –

+1

Зачем вам эти фреймы? Если вам нужно проверить какое-то важное событие, лучше получить оба кадра. – MBo

ответ

2

Самая точная вещь, которая у вас есть в вашем распоряжении is время кадра. Когда вы говорите, что произошло событие в 2500 мс, откуда это время? Почему это не соответствует вашей частоте кадров? У вас есть только видеоданные в 2483 мс и 2517 мс, и это не так.

Если вы отслеживаете объект на видео и хотите его положение при t = 2500, вы можете интерполировать позицию из известных точек данных. Вы можете сделать это либо путем линейной интерполяции между соседними кадрами, либо, возможно, путем установки кривой на траектории объекта и решения для целевого времени.

Если вы хотите перестроить полный кадр при t = 2500, то это намного сложнее и по-прежнему остается открытой проблемой.