OpenCV 2.4.8 (Python) Определение ориентации стрелки

В настоящее время я работаю над проектом, где мне нужно определить ориентацию стрелок. Эти стрелки будут использоваться в качестве входных данных для робота, чтобы определить, в каком направлении он должен двигаться.

Я использую Beaglebone Black с Ubuntu и OpenCV 2.4.8. Я экспериментировал с SURF, ORB, SIFT, Moments и BFMatcher. Я не нашел надежного способа определить ориентацию стрелки. Это нужно делать в режиме реального времени, так как мы будем использовать кадры из видео.

Мне было интересно, может ли кто-нибудь предложить надежное решение для определения ориентации стрелки?

Вот пример изображения:


person Knoose    schedule 05.04.2014    source источник


Ответы (1)


Вот некоторый подход, я думаю, он будет работать с изображением, которое вы предоставили.

Поскольку ваше изображение стрелки имеет следующий угол для каждого угла, как показано на изображении ниже, вы всегда можете рассматривать кончик стрелки как угол с углом, близким к 90 градусам, а также соседний угол с углом, близким к 45 градусам.

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

введите здесь описание изображения

Так что попробуй с

  1. Найдите контур и приблизительноPolyDP.

  2. Найдите угол для каждой линии, а также угол (угол между соседними линиями).

  3. Найдите кончик стрелки, используя приведенные выше критерии для угла.

  4. Теперь у вас есть указатель со стрелкой и соседняя линия (с углом), возьмите результирующую этих двух линий в качестве направления, то есть просто добавьте угол.

Также см. эту ссылку.

person Haris    schedule 05.04.2014
comment
Итак, я использую изображение, опубликованное выше, и запускаю следующую программу: i.imgur.com /0myNfap.png Я получил следующий вывод: i.imgur.com/yxpqlz7.png Я не знаю, как лучше всего искать кончик стрелы? - person Knoose; 06.04.2014
comment
@Knoose Увеличивайте значение эпсилон в procPolyDP() до тех пор, пока не получите общее количество точек 7, поскольку ваша стрелка имеет 7 углов. - person Haris; 06.04.2014
comment
В итоге я использовал cv2.goodFeaturesToTrack(). Я заставил его найти 7 точек интереса на обрезанном изображении моей стрелки. Это сработало очень хорошо, потому что обрезка изображения удалила линии моей «дороги», а cv2.goodFeaturesToTrack() получила нужные мне точки. Я также создал свой собственный алгоритм определения направления, и он работает очень надежно. Спасибо за помощь! - person Knoose; 08.04.2014
comment
Мне это тоже очень помогло! Спасибо - person Ivantha; 16.08.2016
comment
Я сделал почти то же самое для университетского проекта. Путем множества проб и ошибок я в конце концов пришел к очень похожему подходу. github.com/NewDevices/football_project, если кому-то интересно. Найдите object_finder.py и метод find_arrow. - person Hendrikto; 06.05.2017