您的位置:首页 > 其它

摄像机模型与标定—棋盘、亚像素角点和绘制棋盘角点

2015-09-06 20:49 267 查看
棋盘

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()函数的返回值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: