Обнаружение местоположения и заголовка формы с помощью opencv

Фон

Я работаю над дешевым и простым методом отслеживания роботов в их среде, избегая GPS, энкодеров и т. Д. Будет несколько роботов, стремящихся достичь целевой области (см. Базовый пример ниже), и компьютер должен передавать им данные. на их местоположении, курсе и цели. пример

Подход

Я решил использовать камеру, смотрящую сверху вниз на тестовую область, в сочетании с цветными фигурами (например, стрелкой) поверх роботов и использовать OpenCV для определения их положения и ориентации в последовательных кадрах из видео.

В идеале должен быть довольно непрерывный поток данных о местоположении и ориентации для каждого робота, однако я работал с OpenCV раньше и понимаю, что это может занять время. Частота обновления около 1 Гц (или выше) была бы приемлемой (т. е. более низкая частота кадров/не использование всех кадров).

Я использовал OpenCV раньше, чтобы фильтровать кадры SIFT из видео и обнаруживать функции для создания мозаичного изображения из кадров. Однако мне трудно адаптировать свои текущие знания к этой конкретной проблеме, и онлайн-исследования не очень помогли с простым способом определения ориентации.

Вопрос

Какой самый простой способ быстро определить положение и ориентацию фигуры на изображении?


person S. Dunnim    schedule 28.01.2020    source источник


Ответы (1)


Вы можете просто использовать minAreaRect. Вы можете взять этот пример в качестве справки. Делая это, вы получите подогнанные прямоугольники для каждого вашего объекта, а затем вы можете использовать средние точки краев прямоугольника, чтобы получить угол.

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

person Yunus Temurlenk    schedule 28.01.2020
comment
Спасибо за ответ - это был подход, который я изначально имел в виду, но два возможных решения для каждого прямоугольника меня оттолкнули. Какой алгоритм вы предлагаете исправить? - person S. Dunnim; 28.01.2020
comment
@S.Dunnim Если говорить о треугольниках на вашем изображении, вы можете составить алгоритм на основе коротких и длинных краев прямоугольников. Для данных вращения minAreaRec — очень точный метод, я много раз использовал его в своих проектах. - person Yunus Temurlenk; 28.01.2020
comment
Спасибо, чтобы уточнить, я вижу, как использовать minAreaRect для получения двух возможных углов ориентации. Я просто не знаю, как выбрать правильный? По большей части я могу использовать самый последний угол в качестве опорного угла и выбирать новый угол, ближайший к опорному, но как мне выбрать в начале процесса без опорного угла? Или когда стрелка проходит через 12 часов, а 2 новых возможных угла одинаково близки к опорному углу? Ваше здоровье - person S. Dunnim; 28.01.2020
comment
@S.Dunnim, что вы подразумеваете под ссылкой? Я, наверное, неправильно понял вас раньше. Можете ли вы быть более ясным? - person Yunus Temurlenk; 28.01.2020
comment
Ах, извините. Насколько я понимаю, метод minAreaRect даст 2 возможных угла, на которые может быть ориентирован объект. Проблема в том, чтобы решить, что правильно. Для большей части движения робота это легко сделать, так как это будет тот угол, который ближе всего к предыдущему углу («опорный» угол). Однако при выборе самого первого угла нет предыдущего («эталонного») угла, чтобы сравнить его с... - person S. Dunnim; 28.01.2020