#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
压缩到棋盘角上,包括icvFindConnectedQuads
,icvCleanFoundConnectedQuads
以删除多余的角,icvCheckQuadGroup
和icvCheckBoardMonotony
。除了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