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
cvCheckChessboard
diese 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 quads
auf Schachbrettecken zu verdichten , einschließlich icvFindConnectedQuads
, icvCleanFoundConnectedQuads
um zusätzliche Ecken zu entfernen icvCheckQuadGroup
, und icvCheckBoardMonotony
.
Alle diese Funktionen sind in derselben Datei implementiert, außer cvCheckChessboard
in 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_CHESSBOARD
tun, um zu sehen, was los ist.