本文记录使用opencv中samples/cpp中自带的calibration.cpp程序来校准摄像头。
第一步、打印棋盘图。可以自己写程序绘制,也可以随意下载一幅。在OpenCV的wiki中也有:http://wiki.opencv.org.cn/index.php/%E6%91%84%E5%83%8F%E5%A4%B4%E6%A0%87%E5%AE%9A
第二步、新建一个OpenCV工程,配置好环境,将sources/samples/cpp下的calibration.cpp选进工程并编译,生成可执行文件。假设命名为calib.exe
第三步、将摄像头对着棋盘图从多个视角拍摄照片。拍摄15~20张即可。建立.xml文件,格式如下:
<?xml version="1.0"?>
<opencv_storage>
<images>
"D:\opencv\calib1.jpg"
"D:\opencv\calib2.jpg"
……
"T:\opencv\calib20.jpg"
</images>
</opencv_storage>
将此文件保存在calib.exe同目录下。假设命名为img.xml。
第四步、打开一个命令行,导航至calib.exe目录下,使用指令:calib.exe -w <width> -h <height> -s <squre_size> -o camera.yaml -op -oe -su img.xml
其中<height>和<width>分别是纵向和横向格数减一。<square_size>是方格尺寸。
执行之后,会进行逐图片的角点提取,最后会生成一幅无扭曲的图像。
同时校准文件也生成在同目录下,为camera.yaml。