Есть ли какой-нибудь код C ++ opencv для вычисления скорости ключевых точек в каждом кадре видео?

Я хотел бы вычислить скорость ключевых характерных точек и установить пороговое значение для обнаружения движения в видео.

У меня есть код 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], которые содержат текущий кадр & предыдущий кадр обнаружил точки соответственно. Мне нужно рассчитать скорость обнаруженных ключевых характерных точек.

-4

Решение

Как упоминал Тоббе, вы должны сначала попытаться получить некоторые результаты с образцами данных, а затем попросить помощи с тем, что у вас есть, о том, что вам нужно дальше.

Чтобы дать краткий ответ, вы должны сначала установить библиотеку обработки изображений, такую ​​как OpenCV, а затем написать пример кода для загрузки и обработки кадров из вашего видео. Затем вы можете сегментировать объекты в первом кадре, отслеживать их в следующих кадрах и использовать статистику для расчета скорости.

Редактировать: Теперь мы видим, что у вас уже есть позиции в предыдущем и текущем кадре. Обычный метод получения скорости в пикселях / секунду — это вычисление расстояния (евклидова или отдельных осей в зависимости от ваших потребностей) между двумя точками, а затем умножение его на частоту кадров. Однако, поскольку видео, скорее всего, снимается со скоростью много кадров в секунду, вы также можете выполнить взвешенное усреднение по скорости из предыдущей пары кадров.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]