¿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
cvCheckChessboardpara determinar si hay un tablero de ajedrez en la imagenicvGenerateQuadspara encontrar los cuadrados. Luego, el código parece ir a través de un conjunto de controles para condensarlos quadsen las esquinas del tablero de ajedrez, incluidos icvFindConnectedQuads, icvCleanFoundConnectedQuadspara eliminar esquinas adicionales icvCheckQuadGroup, y icvCheckBoardMonotony.
Todas estas funciones se implementan en el mismo archivo, aparte de cvCheckChessboardque 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.