机器视觉学习笔记(7)——基于OpenCV的双目摄像机标定
标签: 机器视觉
本文CameraCalibrator
类源代码来自于OpenCV2 计算机视觉编程手册(Robert Laganiere 著 张静 译)
阅读本文之前请先阅读以下三篇博文:
机器视觉学习笔记(4)——单目摄像机标定参数说明
机器视觉学习笔记(5)——基于OpenCV的单目摄像机标定
机器视觉学习笔记(6)——双目摄像机标定参数说明
1.双目摄像机标定目的
双目摄像机标定最主要的目的就是要得出左右两个摄像机的相对位置关系,但是在OpenCV中,计算表示左右摄像机位置的矩阵R和T的同时,也可以求出每个摄像机的相机内参数矩阵M和畸变系数矩阵D。
2.Q&A
Q1:双目标定之前需要单目标定吗?
A:推荐先进行单目标定,但不是必须,具体取决于精度要求以及程序实现方式。OpenCV中双目标定的关键函数是double stereoCalibrate()
double stereoCalibrate(
InputArrayOfArrays objectPoints,
InputArrayOfArrays imagePoints1,
InputArrayOfArrays imagePoints2,
CV_OUT InputOutputArray cameraMatrix1,
CV_OUT InputOutputArray distCoeffs1,
CV_OUT InputOutputArray cameraMatrix2,
CV_OUT InputOutputArray distCoeffs2,
Size imageSize, OutputArray R,
OutputArray T, OutputArray E, OutputArray F,
TermCriteria criteria =
TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 1e-6),
int flags=CALIB_FIX_INTRINSIC );
该函数最后一个参数flags
表示参数中标定矩阵的一些限定:
- 默认的参数是
CV_CALIB_FIX_INTRINSIC
,该参数表示cameraMatrix1
,distCoeffs1
,cameraMatrix2
,distCoeffs2
这4个矩阵已经是准确值了,不需要再计算了。即单独对两个摄像机标定后,选择默认参数即可 - 其它的参数表示在某种限定情况下计算
cameraMatrix1
,distCoeffs1
,cameraMatrix2
,distCoeffs2
这4个矩阵。例如官方文档推荐的CV_CALIB_SAME_FOCAL_LENGTH | CV_CALIB_ZERO_TANGENT_DIST
,表示强制左右摄像机的 f x f_x f