findChessboardCorners函数学习笔记

  在双目视觉应用领域,要想进行精确的操作,第一步要做的就是对摄像机的内参数进行求解,这个过程称之为标定。整个标定过程由cameraCalibrate()函数完成,测量相机焦距和便宜主要的原理是张正友标定法,测量畸变参数是Brown算法。该标定函数的一个输入参数是像点坐标,即在摄像机成像平面上对应角点相对于摄像机坐标系的二维坐标。而获得像点坐标的函数第一步就是找到角点坐标,函数是

findChessboardCorners(InputArray image,                                                                           Size patternSize,OutputArray corners,                                                                                                         int flags=CALIB_CB_ADAPTIVE_THRESH+CALIB_CB_NORMALIZE_IMAGE)

版本:OpenCV2.4.9
功能:找到标定板内角点位置(标定板是专用器具,需要有严格的规格控制,标定板的制作精度直接影响标定精度;角点是指黑白色相接的方块定点部分;内角点是不与标定板边缘接触的内部角点)
参数:1.输入的图像矩阵,必须是8-bit灰度图或者彩色图像,在图像传入函数之前,一般经过灰度处理,还有滤波操作。
   2.内角点的size,表示方式是定义Size PatSize(m,n),将PatSize作为参数传入。这里是内角点的行列数,不包括边缘角点行列数;行数和列数不要相同,这样的话函数会辨别出标定板的方向,如果行列数相同,那么函数每次画出来的角点起始位置会变化,不利于标定。
   3.存储角点的数组,一般用

vector<vector<point2f>>
这种数据类型存储。
   4.标志位,有默认值。这里还不是很清楚具体的应用场合,一般采用默认取值。
总结:该函数的功能就是判断图像内是否包含完整的棋盘图,如果能够检测完全,就把他们的角点坐标按 顺序(逐行,从左到右)记录下来,并返回非0数,否则返回0。这里对size参数要求非常严格,函数必须检测到相同的size才会返回非0,否则返回0,这里一定要注意。该函数检测的角点的坐标是不精确的,要想精确结果,需要使用 cornerSubPix()函数,进行亚像素精度的调整。

下面给出几幅标定图像:
findChessboardCorners函数学习笔记_第1张图片

这是正常的角点检测图像,但是检测结果是失败
findChessboardCorners函数学习笔记_第2张图片
findChessboardCorners函数学习笔记_第3张图片
去掉棋盘周围的黑框后,检测角点成功


加上干扰因素后,同样能够正常检测,说明只要棋盘图像不受影响,那么检测角点也是不受影响的
findChessboardCorners函数学习笔记_第4张图片

对棋盘图像进行干扰,在其中穿过一条直线,检测失败

  多次试验表明,该角点检测函数的抗干扰能力还是比较强的,但是前提是棋盘图像不能收到干扰,换言之就是不能干扰到程序判定棋盘内角点的Size,否则检测失败。

你可能感兴趣的:(函数,opencv)