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

转载: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()函数的返回值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值