Как определить букву «E» с любого угла в opencv

OpenCV начинающий здесь. Я изо всех сил пытаюсь обнаружить определенную форму в openCV с помощью C++, Конкретной формой является буква "E",

Я рассмотрел несколько способов сделать это. Соответствие шаблона и OCR не будет работать под любым углом, поэтому я подумываю использовать хитрое определение краев. После исследования этого может показаться, что можно использовать преобразование линии Хафа или обнаружение хитрых краев.

Я могу реализовать оба из них, но это следующий шаг, с которым у меня возникли проблемы. Может ли кто-нибудь из вас дать несколько советов о том, как двигаться дальше отсюда. После применения фильтра Канни, как проверить, присутствует ли буква «Е»?

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

Входные данные:

вход

Выход:

выход

3

Решение

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

  1. Извлеките контуры из двоичного изображения (Canny), используя cv::findContours().
  2. Для каждого найденного контура сравните количество точек контура с количеством точек контура, которое вы ожидаете получить для буквы «E».
  3. Если он совпадает, вы обнаружили «E».

Если вам нужно больше надежности, вы можете:

  • Добавьте последующие проверки на основе контура, например, моменты, Ху моменты.
  • Дальнейшие этапы предварительной обработки, например, вращают ограничивающий прямоугольник объектов-кандидатов в некоторой нормализованной ориентации.
  • Нечто совершенно иное, например, обобщенное преобразование Хафа (как здесь: Обработка изображений: Улучшение алгоритма для распознавания Coca-Cola Can).
  • Я не думаю, что SIFT или SURF подойдут, потому что объекту не хватает интересной текстуры.
2

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

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

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