Wie funktioniert die OpenCV-Funktion findChessboardCorners intern ?
Wie funktioniert die OpenCV-Funktion findChessboardCorners intern ?
Antworten:
Der Quellcode von OpenCV ist verfügbar, daher würde ich empfehlen, sich etwas Zeit zu nehmen, um den Code durchzugehen. Die relevante Datei für diese bestimmte Funktion lautet:
Ich habe es nicht im Detail untersucht, aber es sieht so aus
CV_IMPL
int cvFindChessboardCorners( const void* arr, CvSize pattern_size,
CvPoint2D32f* out_corners, int* out_corner_count,
int flags )
ist die Hauptimplementierung dieser Methode. Hier drin sie
cvCheckChessboarddiese Option, um festzustellen, ob sich ein Schachbrett im Bild befindeticvGenerateQuads, um die Quadrate zu finden. Der Code scheint dann eine Reihe von Überprüfungen zu durchlaufen, um diese quadsauf Schachbrettecken zu verdichten , einschließlich icvFindConnectedQuads, icvCleanFoundConnectedQuadsum zusätzliche Ecken zu entfernen icvCheckQuadGroup, und icvCheckBoardMonotony.
Alle diese Funktionen sind in derselben Datei implementiert, außer cvCheckChessboardin calib3d / src / checkchessboard.cpp . Je nachdem, wie gut Sie den Code verstehen wollten, scheint es eine Reihe von Debugging-Zeilen zu geben, die enthalten sein können, wenn Sie dies #define DEBUG_CHESSBOARDtun, um zu sehen, was los ist.