Comment supprimer les défauts de convexité dans un carré de Sudoku ?

| | | | | | | | | |

Je faisais un projet amusant : Résoudre un Sudoku à partir d'une image d'entrée en utilisant OpenCV (comme dans les lunettes Google, etc.). Et j'ai terminé la tâche, mais à la fin j'ai trouvé un petit problème pour lequel je suis venu ici.

J'ai fait la programmation en utilisant l'API Python d'OpenCV 2.3.1.

Ci-dessous c'est ce que j'ai fait :

  1. Lisez l'image
  2. Recherchez les contours
  3. Sélectionnez celui avec la surface maximale, (et aussi un peu équivalent au carré) .
  4. Trouvez les points d'angle.

    ex. ci-dessous :

    entrer la description de l'image ici

    (Remarquez ici que la ligne verte coïncide correctement avec la véritable limite du Sudoku, de sorte que le Sudoku peut être correctement déformé. Vérifiez l'image suivante)

  5. déformez l'image en un carré parfait

    par exemple, image :

    entrer la description de l'image ici

  6. Effectuer l'OCR (pour lequel j'ai utilisé la méthode que j'ai donné dans Simple Digit Recogn ition OCR dans OpenCV-Python )

Et la méthode a bien fonctionné.

Problème :

Consultez cette image.

L'exécution de l'étape 4 sur cette image donne le résultat ci-dessous :

entrer la description de l'image ici

La ligne rouge tracée est le contour d'origine qui est le véritable contour de la limite du sudoku.

La ligne verte tracée est le contour approximatif qui sera le contour de l'image déformée.

Ce qui bien sûr, il y a une différence entre la ligne verte et la ligne rouge sur le bord supérieur du sudoku. Ainsi, lors de la déformation, je n'obtiens pas la limite d'origine du Sudoku.

Ma question :

Comment puis-je déformer l'image sur la limite correcte de le Sudoku, c'est-à-dire la ligne rouge OU comment supprimer la différence entre la ligne rouge et la ligne verte ? Existe-t-il une méthode pour cela dans OpenCV ?