OpenCV如何找到棋盘角?


Answers:


12

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

calib3d / src / calibinit.cpp

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

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

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

  1. 使用cvCheckChessboard以确定棋盘是图像中
  2. 转换为二进制(B&W)并扩张以分开角落
  3. 使用icvGenerateQuads找到的平方。

然后,该代码似乎走不过一组检查凝结这些quads到棋盘的角落,包括icvFindConnectedQuadsicvCleanFoundConnectedQuads删除多余的角落,icvCheckQuadGroupicvCheckBoardMonotony

所有这些功能都在同一个文件中实现,除了cvCheckChessboardcalib3d / src / checkchessboard.cpp中。根据您对代码的理解程度,似乎有许多调试行,如果您可以包含在内,则#define DEBUG_CHESSBOARD可能会帮助您了解发生了什么。


1
感谢您的回答。我知道我可以查找它,但我只是好奇,但还不足以浏览源代码。我希望有人能弄清楚这一点,并能解释一下原理:)
Geerten 2012年

1
我找到了一篇写得很好的论文……也提供了另一种更稳定,更快的方法(根据作者)researchgate.net/publication/…–
philippe
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.