搞图像处理离不开相机标定。但是在某些小项目中,我们希望尽可能快速简单地完成相机标定这一过程,而不希望为了获得几个相机参数而大动干戈的写代码。OpenCV其实为我们提供了一个完整的标定代码,用这个现成的代码我们可以快速完成相机的标定,而几乎不需要写任何代码。而且支持链接相机、视频和图片组多种输入源,以及亚像素精度地角点探测。相机标定的理论知识在网上到处都是,在这篇博客中不再重复。这篇博客也不包含对代码的解释,具体对代码的解读可以阅读官方说明。这里简单粗暴,只有HOW TO。
环境
- Windows 10 64bit
- Visual Studio 2015
- OpenCV (安装过程见另一篇博客)
实现步骤
采集标定数据
- 下载或者自己制作棋盘格并打印出来。OpenCV提供了一个棋盘格https://docs.opencv.org/3.1.0/pattern.png
- 对着棋盘格用待标定相机拍N张照片,这个棋盘格应该完整的出现在视野当中。
- 记录横向纵向分别有多少个角点。比如上面给出的棋盘格横向有9个角点,纵向有6个角点。注意角点只存在与棋盘格内部,最外部边缘的不是角点。
- 测量每个小格的边长,单位mm。
新建工程项目
在VS 2015中新建项目,选择Empty Project,命名为Calibration。打开OpenCV源代码所在位置,进入目录samples\cpp\tutorial_code\calib3d\camera_calibration。把该文件夹下四个文件拷贝到Calibration项目所在位置。四个文件分别为:
- camera_calibration.cpp 标定代码
- in_VID5.xml 标定过程参数设置
- VID5.xml 标定图片位置索引
如果手边没有OpenCV源代码,也可以从以下地址下载这三个文件:
https://docs.opencv.org/2.4/_downloads/camera_calibration.cpp
https://docs.opencv.org/2.4/_downloads/in_VID5.xml
https://docs.opencv.org/2.4/_downloads/VID5.xml
然后在Visual Studio中把camera_calibration.cpp文件加入到项目源代码文件夹内。

把OpenCV的相关的include,lib等库文件加入到项目属性中。(具体过程见另一篇博客)
将刚才拍摄的标定图片放入到项目目录下的某个文件夹,例如“VID5”文件夹。
修改代码
对源代码需要做两处修改。
- 在代码最开头加入
#pragma warning(disable : 4996)屏蔽4996号Error。否则无法通过编译。

- 将第233行的”
default.xml“改为”in_VID5.xml“。当然,也可以反过来,把”in_VID5.xml“文件的文件名改为”default.xml“。只要一致即可。
对”in_VID5.xml“文件,或者说已经改为”default.xml“的文件进行如下修改并保存:
<BoardSize_Width> 9</BoardSize_Width> <!-- 这里输入横向角点个数--><BoardSize_Height>6</BoardSize_Height> <!-- 这里输入纵向角点个数--><Square_Size>26.1</Square_Size> <!-- 这里输入打印出的棋盘格每个小格的实际边长-->- `“VID5.xml” “
最后打开”VID5.xml“文件,在<images>和</images>之间加入标定图片的地址并保存。例如:
<images>
VID5/xx1.jpg
VID5/xx2.jpg
VID5/xx3.jpg
VID5/xx4.jpg
VID5/xx5.jpg
VID5/xx6.jpg
VID5/xx7.jpg
VID5/xx8.jpg
</images>
编译和运行程序
打开VS项目,编译并运行程序。标定图片即角点会依次显示在屏幕上。直到命令窗口显示Calibration succeeded. avg re projection error = xxxx说明标定完成。
这是可以打开out_camera_data.xml查看标定结果了。一般来说,最重要的结果是相机的内参数矩阵和畸变修正系数。即:
<Camera_Matrix type_id="opencv-matrix">
<rows>3</rows>
<cols>3</cols>
<dt>d</dt>
<data>
2.6780555209909307e+03 0. 1.6315000000000000e+03
0. 2.6780555209909307e+03 1.2235000000000000e+03
0. 0. 1.
</data>
</Camera_Matrix>
<Distortion_Coefficients type_id="opencv-matrix">
<rows>5</rows>
<cols>1</cols>
<dt>d</dt>
<data>
1.3202671408300112e-01 -7.5480401784082296e-01 0. 0.
1.8509510584787703e+00
</data>
</Distortion_Coefficients>
分别对应标定原理中的

本文介绍了如何利用OpenCV提供的预置代码快速完成相机标定,无需大量编写额外代码。步骤包括:采集标定数据,使用棋盘格拍摄多张照片;新建Visual Studio空项目,导入并配置OpenCV相关文件;修改代码以匹配图片路径;编译并运行程序,完成相机内参和畸变系数的获取。
最低0.47元/天 解锁文章
1072

被折叠的 条评论
为什么被折叠?



