0. 前言
在http://blog.csdn.net/lwx309025167/article/details/78086295中已经利用棋盘格和张正友标定法实现了单目相机的标定,得到了相机的内参数。在看opencv的示例代码时发现calibrateCamera()不仅计算得到了相机的内参数,也同时得到了每张标定图片所在世界坐标系和相机坐标系之间的转换矩阵T(由旋转矩阵r和平移矩阵t组成)。同时,opencv也提供了cvFindExtrinsicCameraParams2()函数可以在已知相机内参数的前提下计算外参数。不由得想到,外参数中的平移矩阵t,不就是棋盘格所在的世界坐标系原点在相机坐标系的三维坐标吗?那如果我得到了相机的内参数,然后再使用棋盘格采集图像后调用cvFindExtrinsicCameraParams2(),不就得到了棋盘格中原点在相机坐标系的三维坐标了?之后就动手尝试了下,验证了上述猜测是正确的~
1.原理
由于本人并不擅长理论方面,也为了避免误导他人,这里仅仅简单描述下基本原理。有关相机的标定流程和数学原理,在《学习opencv》的第十一章中有详细描述,十分推荐大家看这本书。在给定了一系列棋盘格角点的世界坐标系坐标和像素坐标系坐标后,我们可以使用calibrateCamera()计算得到相机的内参数和每张标定图片所在世界坐标系和相机坐标