Время прочтения: 3 мин.

Изображения с просто неверной ориентацией можно повернуть несколько раз, пока нужный текст не будет обнаружен. Это увеличит время обработки в 1-4 раза, но, рано или поздно, результат будет получен. Однако, что делать, если изображение повёрнуто на малый угол? Чтобы автоматизировать процесс поворота таких изображений, необходимо сначала распознать угол поворота.

Для решения этой задачи может быть использован следующий алгоритм:

  1. бинаризировать изображение,
  2. уменьшить изображение,
  3. найти контуры,
  4. найти прямые линии на изображении с помощью преобразования Хаффа,
  5. считать угол наклона прямых,
  6. посредством аффинных преобразований повернуть изображение на требуемый угол.

Был разработан прототип инструмента, реализующий данный алгоритм. Результаты работы прототипа инструмента представлены далее:

Оригинал изображения:

Очистка изображения:

cv.adaptiveThreshold()

Уменьшение:

cv.resize()

Выделение границ:

cv.Canny()

Выделение линий:

cv.HoughLinesP()

Результат:

cv.warpAffine()

Также, ещё несколько примеров:

Рисунок 1 – исходное изображение, снимок экрана текста
Рисунок 2 – результат работы для снимка экрана текста
Рисунок 3 – исходное изображение, фото текста
Рисунок 4 – результат работы для фото текста

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

Исходный код разработанного прототипа инструмента находится по ссылке на репозиторий на GitHub.