一、背景介绍
我们在根据相机拍摄的图像,计算世界坐标,指引机器人执行各种操作。前提是需要知道相机的内外参数,这篇文章主要是讲解python使用opencv实现相机内参标定的代码,如果想了解更详细的原理,可以参考其他的文章。
二、标定工具
1、棋盘格标定板,标定板的尺寸根据具体情况来定,推荐标定板在线生成网站:Camera Calibration Pattern Generator – calib.io,在这个网站设置好标定板的参数,左侧会自动生成相应的标定板,可以下载保存成PDF,自己可以打印(1:1),也可以将此文件发送给标定版制作的人。
2、相机。
三、详细代码
1、主要用到的函数:
(1)ret, corners = cv2.findChessboardCorners(gray, (row_num, col_num), None)
- 函数功能:根据相机拍到的标定板画面,找到标定板的角点,存入corners,ret是找到角点的flag
- 参数介绍:
gray:相机采集到的灰度图像;
row_num:标定板行角点数;
col_num:标定板列角点数;
(2)ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, size, None, None)
- 函数功能:根据多张标定板图片找到的多组标定版角点,进行标定, mtx:内参数矩阵,dist:畸变系数,rvecs:旋转向量,tves:平移向量
- 参数介绍:
obj_points:多组标定版角点的世界坐标,左上角的角点为[0,0];
img_points:检测到的多组标定板角点,是像素点;
size:灰度图像的h,w。
2、执行过程:
(1)通过调整相机或者标定版,采集多种姿态的数据(一般会让标定板出现在相机的各个位置,同时带有旋转、倾斜的变化,这样会让标定更加精确),执行1的函数,得到多组corners数据;
(2)执行1的函数,得到最终的相机内参,包括mtx:内参数矩阵,dist:畸变系数,rvecs:旋转向量,tves:平移向量。
3、代码
需要具体详细的代码,可以去本人资源链接下载https://download.csdn.net/download/u012803927/88251638