是否有任何 C++ opencv 代码来计算每帧视频中关键特征点的速度?

Is there any C++ opencv code to compute velocity of key feature points in each frame of video?

我想计算关键特征点的速度并为视频中的运动检测设置阈值。

我有一个 python 代码如下:

def compute_vel_kf(自身, fps):

   if ((len(self.features) == 0) or (self.features == None)):
        return;
   test_image = self.current_frame.copy();

    time_diff_in_sec = 1/fps;
    self.v = [];

    for i, p1 in enumerate(self.features):
        p2 = self.features_prev[i];
        # speed = dist/time
        vx, vy = [(p1[0][0] - p2[0][0]), (p1[0][1] - p2[0][1])];           
        v = sqrt(vx * vx + vy * vy)*fps;
        ang = math.atan2(vy, vx);
        self.v.append(array([v, ang]));           
        i += 1;

    return self.v;

我必须将它移植到 cpp 代码。在 cpp 代码中,我使用了 points[1] 和 points[2] 分别保存当前帧和前一帧检测点。我需要计算检测到的关键特征点的速度。

正如 Tobbe 所提到的,您应该首先尝试使用样本数据获得一些结果,然后就您所拥有的以及您接下来需要的内容寻求帮助。

为了给出一个简短的答案,您应该先安装一个图像处理库,如 OpenCV,然后编写一些示例代码来加载和处理视频中的帧。然后您可以在第一帧中分割对象,在接下来的帧中跟踪它们,并使用统计数据计算速度。

编辑: 现在我们可以看到您已经有了前一帧和当前帧的位置。在 pixels/second 中获得速度的通常方法是计算两个位置之间的距离(欧几里德或分离轴,取决于您的需要),然后将其乘以帧速率。但是,由于视频很可能每秒拍摄许多帧,因此您还可以对前一帧对的速度进行加权平均。