Сценарий выглядит следующим образом: у меня есть фотография бумаги, которую я хотел бы сделать с помощью OCR. Поэтому в качестве примера ввода возьмите изображение ниже:
После успешного обнаружения области, которая соответствует бумаге, я остаюсь с vector<Point>
из 4 координат, которые определяют его местоположение внутри изображения. Обратите внимание, что эти координаты, вероятно, не соответствуют идеальному прямоугольнику из-за расстояния камеры и угла при съемке. Для просмотра я подключил точки в суб-изображении, чтобы вы могли видеть, что я имею в виду:
В этом случае точки: [1215, 43], [52, 67], [56, 869] и [1216, 884]
В этот момент мне нужно настроить эти точки, чтобы они выравнивались по горизонтали. Что я имею в виду? Если вы заметили область субизображения выше, она немного повернута: точки с правой стороны изображения расположены немного выше точек на другой стороне.
Другими словами, мы имеем изображение A, которое было преувеличено с целью выглядеть немного более искаженным/повернутым, чем реальность, а затем изображение B - вот что Я хотел бы получить окончательный результат этой процедуры:
A) B)
Я не уверен, что какие методы можно использовать для достижения этого преобразования. Приложение также должно автоматически определять, сколько нужно сделать, поскольку я не контролирую процедуру получения изображения.
Цель состоит в том, чтобы иметь новый Mat
с нормализованным суб-изображением. Я не беспокоюсь о возможном искажении изображения прямо сейчас, я просто ищу способ определить, как много поворота должно выполняться на суб-изображении и как его применять и получить более прямоугольную область.