Quali sono i meccanismi interni della funzione OpenCV findChessboardCorners ?
Quali sono i meccanismi interni della funzione OpenCV findChessboardCorners ?
Risposte:
Il codice sorgente di OpenCV è disponibile, quindi ti consiglio di prenderti un po 'di tempo per esaminare il codice. Il file rilevante per questa particolare funzione è:
Non l'ho esaminato in dettaglio, ma sembra
CV_IMPL
int cvFindChessboardCorners( const void* arr, CvSize pattern_size,
CvPoint2D32f* out_corners, int* out_corner_count,
int flags )
è l'implementazione principale di questo metodo. Qui dentro
cvCheckChessboard
per determinare se una scacchiera è nell'immagineicvGenerateQuads
per trovare i quadrati. Il codice sembra quindi passare attraverso una serie di controlli per condensarli quads
negli angoli della scacchiera, incluso icvFindConnectedQuads
, icvCleanFoundConnectedQuads
per rimuovere gli angoli extra icvCheckQuadGroup
, eicvCheckBoardMonotony
.
Tutte queste funzioni sono implementate nello stesso file, eccetto cvCheckChessboard
in calib3d / src / checkchessboard.cpp . A seconda di quanto tu abbia voluto capire il codice, sembra che ci siano un certo numero di righe di debug, che possono essere incluse se tu #define DEBUG_CHESSBOARD
, che potrebbero aiutarti a vedere cosa sta succedendo.