基于opencv例程samples/cpp/calibration.cpp
首先需要用棋盘捕获摄像头偏移扭曲参数
打印或制作棋盘卡纸(条件有限,只是A4打印,纸太软了效果不大好)
如果是实时拍摄输入
calibration -w 4 -h 5 -s 0.025 -o camera.yml -op -oe
如果从已拍照片中选取输入
calibration -w 4 -h 5 -s 0.025 -o camera.yml -op -oe image_list.xml
image_list.xml由另一例程imagelist_creator.cpp生成
例程中nframes = 10;的数量决定需要10帧图片确定参数,数量多更准确。
实时捕获程序启动后按下g开始
程序会根据捕获的图像不断搜索棋盘,如果图像有效会在右下角数字加一,直到nframes
之后,程序右下角提示calibrated,此时已矫正摄像头并生成参数文件camera.yml
按下u可以切换当前摄像头捕获的图像是否需要应用矫正后的结果。
可以发现矫正后的图像边缘有黑色细缝,图像有所改变。
opencv中矫正的函数为undistort(temp, view, cameraMatrix, distCoeffs);
棋盘图为了得到cameraMatrix, distCoeffs两个参数,一次矫正后得到参数即可之后使用
cap1.jpg cap2.jpg是测试时拍摄的有效棋盘图
capcor1.jpg capcor2.jpg是棋盘图角点的示意图
ori*.jpg是拍摄的原始照片
undistort*.jpg是经过矫正后的图片
Complete data and code:
by Chen Li
2015.2