2017-01-24 19 views
3

Я пытаюсь вывести направление движения объекта с использованием плотного оптического потока в OpenCV. Я использую calcOpticalFlowFarneback() для получения координат потока и cartToPolar() для получения векторных углов, которые указывают направление.Какова контрольная точка для измерения углов в OpenCV?

Для интерпретации результатов мне нужно знать контрольную точку для измерения угла. Я нашел this сообщение в блоге, указывающее, что диапазон углов равен 360 °. Это говорит мне, что измерение угла будет идти по линиям единичного круга. Я не мог разобрать гораздо больше.

Документация для cartToPolar() не распространяется на это, и мои попытки проверить его не удалось.

ответ

3

Похоже, что угол, созданный cartToPolar(), относится к единице окружности, повернутой по часовой стрелке на 90 ° с центром в начальной точке координат изображения в верхнем левом углу. It would look like this.

Я пришел к такому выводу, используя dense optical flow example, предоставленный OpenCV. Я заменил линию hsv[...,0] = ang*180/np.pi/2 на hsv[...,0] = ang*180/np.pi, чтобы получить правильное преобразование угла из радианов. Затем я проверил видео с людьми, двигающимися сверху вниз вправо и наоборот. Я пробовал доминирующий цвет с GIMP и получил значения RGB, которые я преобразовал в значения HSV. Значение оттенка соответствует углу в градусах.

Люди, двигающиеся сверху вниз справа, образуют угол около 300 °, а люди, движущиеся в обратном направлении, образуют угол около 120 °. Это намекало на то, как располагается единичный круг.

0

Глядя на code, fastAtan32f используется для вычисления углов. и это кажется реализацией atan2.