摄像机模型与标定—棋盘、亚像素角点和绘制棋盘角点
2016-09-26 08:09
393 查看
转载: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()函数的返回值。
棋盘
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()函数的返回值。
相关文章推荐
- httputild请求数据
- 《Thinkin in JAVA》前言
- 勾股定理一日一证连载114
- Python的虚拟环境virtualenv
- java反射
- 405. Convert a Number to Hexadecimal
- 关于2016年度计算机技术与软件专业技术资格(水平)考试有关事项的通知
- 二维码
- 策略模式:网络小说的固定套路
- 配置清单文件中修改桌面app图标
- 重构-改善既有代码的设计读书笔记(三)
- 第48篇 接收蓝牙数据及PHP研究 Saturday
- 异步更新
- OSChina 周一乱弹 ——相声如人生
- 单例模式(懒汉模式)
- JavaScript的数据类型和命名规则
- XML解析之pull
- 6个常见的 PHP 安全性攻击
- 代码里写控件的一些例子
- 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)