Я хотел бы вычислить скорость ключевых характерных точек и установить пороговое значение для обнаружения движения в видео.
У меня есть код Python со мной следующим образом:
def compute_vel_kf (self, 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 я использовал точки [1] и точки [2], которые содержат текущий кадр & предыдущий кадр обнаружил точки соответственно. Мне нужно рассчитать скорость обнаруженных ключевых характерных точек.
Как упоминал Тоббе, вы должны сначала попытаться получить некоторые результаты с образцами данных, а затем попросить помощи с тем, что у вас есть, о том, что вам нужно дальше.
Чтобы дать краткий ответ, вы должны сначала установить библиотеку обработки изображений, такую как OpenCV, а затем написать пример кода для загрузки и обработки кадров из вашего видео. Затем вы можете сегментировать объекты в первом кадре, отслеживать их в следующих кадрах и использовать статистику для расчета скорости.
Редактировать: Теперь мы видим, что у вас уже есть позиции в предыдущем и текущем кадре. Обычный метод получения скорости в пикселях / секунду — это вычисление расстояния (евклидова или отдельных осей в зависимости от ваших потребностей) между двумя точками, а затем умножение его на частоту кадров. Однако, поскольку видео, скорее всего, снимается со скоростью много кадров в секунду, вы также можете выполнить взвешенное усреднение по скорости из предыдущей пары кадров.
Других решений пока нет …