OpenCV函数findChessboardCorners的内部工作原理是什么?

#1 楼

OpenCV的源代码可用,因此我建议您花一些时间来检查代码。此特定功能的相关文件是:


我没有详细研究它,但看起来像是

CV_IMPL
int cvFindChessboardCorners( const void* arr, CvSize pattern_size,
                             CvPoint2D32f* out_corners, int* out_corner_count,
                             int flags )


是此方法的主要实现。在这里,他们


使用cvCheckChessboard来确定图像中是否有棋盘
转换为二进制(B&W)并扩张以将拐角分开
使用icvGenerateQuads可以找到正方形。

然后,代码似乎经过了一系列检查,以将这些quads压缩到棋盘角上,包括icvFindConnectedQuadsicvCleanFoundConnectedQuads以删除多余的角,icvCheckQuadGroupicvCheckBoardMonotony。除了calib3d / src / checkchessboard.cpp中的cvCheckChessboard,这些功能中的所有功能都在同一文件中实现。根据您对代码的理解程度,似乎会有许多调试行,如果您#define DEBUG_CHESSBOARD可以包括在内,这可能有助于您了解发生了什么。

评论


$ \ begingroup $
感谢您的回答。我知道我可以查找它,但我只是好奇,但还不足以浏览源代码。我希望有人能弄清楚这一点,并能解释其原理:)
$ \ endgroup $
– Geerten
2012年7月5日在8:35



$ \ begingroup $
我找到了一篇写得很好的论文...也提供了一种更稳定,更快(根据作者)的替代方法researchgate.net/publication / ...
$ \ endgroup $
– philippe
18年4月13日在15:41