点击上方“Qt学视觉”,选择“星标”公众号重磅干货,第一时间送达
共同学习共同进步
1、如何查阅OpenCV官方说明文档
查阅地址:
https://docs.opencv.org/4.3.0/
我这里使用的是OpenCV4.3,所以我需要查阅的就是4.3版本的说明文档
上图就是OpenCV4.3官方文档的主界面
在这里我们需要查阅的就是calib3d模块,所以需要打开calib3d对应的内部说明介绍
逐步玩下拉,找到找棋盘格角点的函数
这里看到有好几个函数,我们需要了解的便是OpenCV4.3新出的
findChessboardCornersSB提取角点的函数,这函数会比以前版本的提取角点更加精确
2、findChessboardCornersSB提取角点
官方文档介绍
这里的参数主要有
image:源棋盘图。它必须是8位灰度或彩色图像。
patternSize:每个棋盘行和列的内角数 cv :: Size(columns,rows)
corners:输出角点
flags:标志位,各种操作标志,可以为零或以下值的组合:
CALIB_CB_NORMALIZE_IMAGE 在检测之前先使用equalizeHist来均衡化图像gamma值
CALIB_CB_EXHAUSTIVE 进行详尽的搜索以提高检测率.
CALIB_CB_ACCURACY 由于混叠效应,使样本输入图像上移以提高子像素精度.
CALIB_CB_LARGER允许检测到的图案大于patternSize
CALIB_CB_MARKER检测到的图案必须具有标记。如果需要精确的相机校准,则应使用此选项.
meta:检测到的角的可选输出数组(CV_8UC1,大小= cv::Size(列,行))。每个条目代表模式的一个角,并且可以具有以下值之一:
0 = 未附加元数据
1 = 黑色单元的左上角
2 = 白色单元的左上角
3 = 黑色单元格的左上角带有白色标记点
4 = 白色单元格的左上角带有黑色标记点(如果是标记,则为图案原点,否则为第一个角)
该函数类似于findchessboardCorners,但使用本地化框式滤波器近似的变换对各种噪声更鲁棒,在较大的图像上更快,并且能够直接返回内部棋盘角的子像素位置。该方法基于论文[56]“用于校准的棋盘格角的精确检测和定位”,表明返回的子像素位置比cornerSubPix返回的子像素位置更精确,从而可以对要求苛刻的应用程序进行精确的相机校准。
在这种情况下,将给出标志CALIB_CB_LARGER或CALIB_CB_MARKER,可以从可选的元数组中恢复结果。这两个标志都有助于使用超出摄像机视场的校准图案。这些超大尺寸的图案允许更精确的校准,因为可以利用尽可能靠近图像边界的角。为了在所有图像上保持一致的坐标系,可以使用可选的标记(请参见下图)将板的原点移动到黑色圆圈所在的位置。
注意
该功能需要一块白色边框,其宽度与整个木板周围的棋盘区域之一的宽度大致相同,以改善在各种环境中的检测能力。另外,由于局部的transformation变换,将圆角用于位于板外部的场角是有益的。下图说明了为检测而优化的示例棋盘格。但是,也可以使用任何其他棋盘格。