Comment OpenCV trouve-t-il les coins de l'échiquier?

Réponses:

12

Le code source d'OpenCV est disponible, je vous recommande donc de prendre un peu de temps pour parcourir le code. Le fichier correspondant à cette fonction particulière est:

calib3d / src / calibinit.cpp

Je ne l'ai pas examiné en détail, mais on dirait

CV_IMPL
int cvFindChessboardCorners( const void* arr, CvSize pattern_size,
                             CvPoint2D32f* out_corners, int* out_corner_count,
                             int flags )

est la principale implémentation de cette méthode. Ici, ils

  1. Utilisez cvCheckChessboardpour déterminer si un échiquier est dans l'image
  2. Convertissez en binaire (noir et blanc) et dilatez pour diviser les coins
  3. Utilisez icvGenerateQuadspour trouver les carrés.

Le code semble donc aller si un ensemble de contrôles pour condenser ces quadsaux coins échiquiers, y compris icvFindConnectedQuads, icvCleanFoundConnectedQuadspour enlever les coins supplémentaires, icvCheckQuadGroupet icvCheckBoardMonotony.

Toutes ces fonctions sont implémentées dans le même fichier, à l'exception de celui cvCheckChessboardqui est dans calib3d / src / checkchessboard.cpp . Selon la façon dont vous vouliez comprendre le code, il semble y avoir un certain nombre de lignes de débogage, qui peuvent être incluses si vous le souhaitez #define DEBUG_CHESSBOARD, qui peuvent vous aider à voir ce qui se passe.

Chris
la source
1
Merci pour votre réponse. Je sais que je pouvais le rechercher, mais j'étais simplement curieux, mais pas assez curieux pour parcourir le code source. J'espérais que quelqu'un aurait compris cela quelque temps et pourrait expliquer les principes :)
Geerten
1
J'ai trouvé un article bien écrit ... qui propose également une méthode alternative plus stable et plus rapide (selon l'auteur) researchgate.net/publication/…
philippe