转载:http://blog.csdn.net/gdut2015go/article/details/48244683?locationNum=9
棋盘
1)cvFindChessboardCorners:定位棋盘的角点。
int cvFindChessboardCorners(
const void* image,
CvSize pattern_size,
CvPoint2D32f* corners,
int* corner_count = NULL,
int flags = CV_CALIB_CB_ADAPTIVE_THRESH );
1、image,输入的棋盘图必须是8位灰度或者彩色图像
2、pattern_size,棋盘图中每行和每列的角点个数(内角点的个数)。如上图为(6,7)。
3、corners,存储角点位置的数组指针,该数组表现事先分配空间,而且至少必须大于棋盘的所有角点的个数。
4、corner_count,变量是可选的,如果不是NULL,则它是一个指向所记录角点数目的正数指针。
5、flag,用来定义额外的滤波步骤以有助于寻找棋盘角点。所有的变量都可以单独或者以逻辑或的方式组合使用。
CV_CALIB_CB_ADAPTIVE_THRESH ,cvFindChessboardCorners()的默认方式是,首先根据平均亮度对图像进行二值化,但如果设置此标志,则使用自适应二值化。
CV_CALIB_CB_NORMALIZE_IMAGE ,如果设置了该标志,则会在二值化之前应用cvEqualizeHist()来归一化图像。
CV_CALIB_CB_FILTER_QUADS ,一旦二值化图像以后,算法试图根据棋盘上黑色方块的投影视场中定位四边形。这是一个逼近的过程,因为四边形的每个边都假设为直角,而实际上由于图像的径向畸变,这个不完全成立。如果这个标志被设置了,那么将对这个四边形使用额外的约束以拒绝错误的四边形。
函数成功找到所有的角点,则返回非0,否则返回0。
亚像素角点
2)cvFindChessboardCorners()返回的角点仅仅是近似值。这意味着实际上位置的精度受限于图像设备的精度,即小于一个像素。该函数使用近似位置和图像作为输入,计算角点的精确位置,以达到亚像素精度。
绘制棋盘角点
3)cvDrawChessboardCorners()将函数cvFindChessboardCorners()发现的所有角点绘制到所提供的图像上。
如果没有发现所有的角点,那么角点将使用红色圆圈绘制。
如果发现了所有的角点,那么角点将用不同颜色绘制(每行使用单独的颜色绘制),并且把角点以一定顺序用线连接起来。
void cvDrawChessboardCorners(
CvArr* image,
CvSize pattern_size,
CvPoint2D32f* corners,
int count,
int pattern_was_found );
1、image,欲绘制的图像,通常是cvFindChessboardCorners()函数所使用图像的复制品,该图像为8位的彩色图像。
2、pattern_size,corners和cvFindChessboardCorners()中定义的一样。
3、count,角点数目
4、pattern_was_found,表示是否所有的棋盘模式都被成功找到,这可以设置为cvFindChessboardCorners()函数的返回值。