按时间从视频中获取帧(openCV)

Get the frame from Video by the time (openCV)

本文关键字:openCV 获取 时间 视频      更新时间:2023-10-16

我有一个视频,我在这个视频中有重要的时刻例如:

    "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,但我觉得这还不够准确,还有更好的解决方案吗?

实现这一点的最佳准确方法是什么?

您可以使用的最准确的东西是帧时间。当你说一个事件发生在2500毫秒时,这个时间是从哪里来的?为什么它与你的帧速率不一致?你只有2483ms和2517ms的视频数据点,这是无法绕过的。

如果在视频中跟踪对象,并且希望其位置为t=2500,则可以根据已知数据点对位置进行插值。可以通过在相邻帧之间进行线性插值来实现,也可以通过在对象轨迹上拟合曲线并求解目标时间来实现。

如果你想在t=2500时重建一个完整的框架,那么它要复杂得多,而且仍然是一个悬而未决的问题。