¿Cuáles son los funcionamientos internos de la función OpenCV findChessboardCorners ?
fuente
¿Cuáles son los funcionamientos internos de la función OpenCV findChessboardCorners ?
El código fuente de OpenCV está disponible, por lo que recomiendo tomarse un tiempo para revisar el código. El archivo relevante para esta función en particular es:
No lo he investigado en detalle, pero parece que
CV_IMPL
int cvFindChessboardCorners( const void* arr, CvSize pattern_size,
CvPoint2D32f* out_corners, int* out_corner_count,
int flags )
es la implementación principal de este método. Aquí ellos
cvCheckChessboard
para determinar si hay un tablero de ajedrez en la imagenicvGenerateQuads
para encontrar los cuadrados. Luego, el código parece ir a través de un conjunto de controles para condensarlos quads
en las esquinas del tablero de ajedrez, incluidos icvFindConnectedQuads
, icvCleanFoundConnectedQuads
para eliminar esquinas adicionales icvCheckQuadGroup
, y icvCheckBoardMonotony
.
Todas estas funciones se implementan en el mismo archivo, aparte de cvCheckChessboard
que está en calib3d / src / checkchessboard.cpp . Dependiendo de qué tan bien quisieras entender el código, parece que hay varias líneas de depuración, que se pueden incluir si lo haces #define DEBUG_CHESSBOARD
, que pueden ayudarte a ver lo que está sucediendo.