Estaba haciendo un proyecto divertido: resolver un Sudoku a partir de una imagen de entrada usando OpenCV (como en las gafas de Google, etc.). Y he completado la tarea, pero al final encontré un pequeño problema por el cual vine aquí.
Hice la programación usando Python API de OpenCV 2.3.1.
Abajo es lo que hice:
- Leer la imagen
- Encontrar los contornos
- Seleccionar el que tenga el área máxima (y también algo equivalente al cuadrado) .
Encuentre los puntos de las esquinas.
Por ejemplo, a continuación:
(Observe aquí que la línea verde coincide correctamente con el verdadero límite del Sudoku, por lo que el Sudoku se puede deformar correctamente. Verifique la siguiente imagen)
deforme la imagen a un cuadrado perfecto
por ejemplo, imagen:
Realizar OCR (para lo cual usé el método que tengo dado en Reconocimiento de dígito simple ition OCR en OpenCV-Python )
Y el método funcionó bien.
Problema:
Vea esta imagen.
Al realizar el paso 4 en esta imagen se obtiene el siguiente resultado:
La línea roja dibujada es el contorno original que es el verdadero contorno del límite del sudoku.
La línea verde dibujada es el contorno aproximado que será el contorno de la imagen deformada.
Que, por supuesto, hay una diferencia entre la línea verde y la línea roja en el borde superior del sudoku. Entonces, mientras deformo, no obtengo el límite original del Sudoku.
Mi pregunta:
¿Cómo puedo deformar la imagen en el límite correcto de el Sudoku, es decir, la línea roja O ¿cómo puedo eliminar la diferencia entre la línea roja y la línea verde? ¿Hay algún método para esto en OpenCV?