OpenCV 函数findChessboardCorners的内部工作原理是什么?
OpenCV如何找到棋盘角?
信息处理
图像处理
opencv
2021-12-29 09:55:16
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
。
所有这些功能都在同一个文件中实现,除了cvCheckChessboard
在calib3d/src/checkchessboard.cpp中。根据您对代码的理解程度,似乎有许多调试行,如果您可以包含#define DEBUG_CHESSBOARD
,这可能有助于您了解发生了什么。
其它你可能感兴趣的问题