OpenCV:相机标定函数和程序

绪:
OpenCV相机标定采用张正友标定法,
以棋盘格为东西,
以棋盘角点图像像素坐标和棋盘角点宿世界坐标系坐标为输入,
输出相机的内参、外参 。
本经验本家儿要介绍:
(1)棋盘角点图像像素坐标系坐标;
(2)棋盘角点宿世界坐标系坐标;
(3)相机标定;
(4)相机标定成果评价;
(5)图像畸变矫正;
(6)标定法式;

OpenCV:相机标定函数和程序

文章插图

需要这些哦
OpenCV2410
方式/
1棋盘角点图像像素坐标

如下:
①提取棋盘格图像内角点-粗角点坐标;
③对粗角点坐标进行亚像素角点提取;
④在棋盘标定图上绘制找到的亚像素内角点(仅显示内角点);
①棋盘格内角点提取函数findChessboardCorners:
bool findChessboardCorners( InputArray image,
Size patternSize,  //内角点行列数
OutputArray corners, 
         int flags=CALIB_CB_ADAPTIVE_THRESH+CALIB_CB_NORMALIZE_IMAGE);
第一个参数image, 是8位灰度、彩色图像;
第二个参数patternSize, 每个棋盘图上内角点的行列数, 一般环境下, 行列数不要不异, 便于后续标定法式识别标定板的偏向;
第三个参数corners, 用于存储检测到的内角点图像坐标位置, 一般用元素是Point2f的标的目的量来暗示:vector<Point2f> image_points_buf;
第四个参数flags:用于界说棋盘图上内角点查找的分歧处置体例, 有默认值 。
②提取亚像素角点信息:
为了提高标定精度, 在提取的角点信息长进一步提取亚像素信息, 降低相机标定误差;
两种方式;一种方式cornerSubPix;另一种方式find4QuadCornerSubpix函数;
void cornerSubPix( InputArray image,
InputOutputArray corners, 
                Size winSize,
Size zeroZone, 
                TermCriteria criteria ); 
第一个参数image, 是8位灰度图像;
第二个参数corners, 输入初始的角点坐标标的目的量, 输出亚像素坐标位置, 浮点型数据, 一般用元素是Pointf2f/Point2d的标的目的量来暗示:vector<Point2f/Point2d> imagePointsBuf;
第三个参数winSize, 大小为搜刮窗口的一半;
第四个参数zeroZone, 死区的一半尺寸, 死区为不合错误搜刮区的中心位置做乞降运算的区域 。 它是用来避免自相关矩阵呈现某些可能的奇异性 。 当值为(-1, -1)时暗示没有死区;
第五个参数criteria, 迭代过程的终止前提, 可觉得迭代次数和角点精度两者的组合;
bool find4QuadCornerSubpix(InputArray img,
InputOutputArray corners,
Size region_size); 
第一个参数img, 是8位灰度图像;
第二个参数corners, 输入初始的角点坐标标的目的量, 输出亚像素坐标位置, 浮点型数据, 一般用元素是Pointf2f/Point2d的标的目的量来暗示:vector<Point2f/Point2d> imagePointsBuf;
第三个参数region_size, 角点搜刮窗口的尺寸;
对比cornerSubPix和find4QuadCornerSubpix:
在标定图上别离运行cornerSubPix和find4QuadCornerSubpix寻找亚像素角点,
两者定位到的亚像素角点坐标别离为:
固然两者有必然差距, 但误差根基都节制在0.5个像素之内 。
③在图像上绘制内角点drawChessboardCorners用于绘制被当作功标定的角点

推荐阅读