Я занимался забавным проектом: решал судоку из входного изображения с помощью OpenCV (как в очках Google и т. д.). И я выполнил задачу, но в конце я нашел небольшую проблему, из-за которой я пришел сюда.
Я программировал с использованием Python API OpenCV 2.3.1.
Ниже вот что я сделал:
- Прочитайте изображение
- Найдите контуры
- Выберите тот, у которого максимальная площадь (а также несколько эквивалентен квадрату) .
Найдите угловые точки.
например, указано ниже:
(Обратите внимание, что зеленая линия правильно совпадает с истинной границей судоку, поэтому судоку можно правильно деформировать. Проверьте следующее изображение)
преобразовать изображение в идеальный квадрат
например, изображение:
Выполните распознавание символов (для чего я использовал метод, который у меня есть дано в простое распознавание цифр OCR в OpenCV-Python )
И этот метод работал хорошо.
Проблема:
Посмотрите это изображение.
Выполнение шага 4 для этого изображения дает следующий результат:
Нарисованная красная линия – это исходный контур, который является истинным контуром границы судоку.
Нарисованная зеленая линия – приблизительный контур, который будет контур искаженного изображения.
Конечно, есть разница между зеленой линией и красной линией на верхнем краю судоку. Поэтому во время деформирования я не получаю исходную границу судоку.
Мой вопрос:
Как я могу деформировать изображение на правильной границе судоку, т.е. красная линия ИЛИ как убрать разницу между красной линией и зеленой линией? Есть ли способ для этого в OpenCV?