是否有任何 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 中获得速度的通常方法是计算两个位置之间的距离(欧几里德或分离轴,取决于您的需要),然后将其乘以帧速率。但是,由于视频很可能每秒拍摄许多帧,因此您还可以对前一帧对的速度进行加权平均。
我想计算关键特征点的速度并为视频中的运动检测设置阈值。
我有一个 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 中获得速度的通常方法是计算两个位置之间的距离(欧几里德或分离轴,取决于您的需要),然后将其乘以帧速率。但是,由于视频很可能每秒拍摄许多帧,因此您还可以对前一帧对的速度进行加权平均。