Attempt at camera calibration using opencv


基于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是测试时拍摄的有效棋盘图

blob.png

blob.png

capcor1.jpg capcor2.jpg是棋盘图角点的示意图

blob.png

blob.png

ori*.jpg是拍摄的原始照片

undistort*.jpg是经过矫正后的图片

blob.png blob.png

blob.png blob.png

blob.png blob.png


Complete data and code: 

摄像头矫正.rar



by Chen Li

2015.2


Next article

Comment 评论



Share 分享

New Users 最新加入

  • hokurikustr

  • refrain

New comments 最新评论

test123: aasdas Details Apr 13 16:39
admin: Thanks! Details Apr 09 11:46
admin: Google map api Details Apr 09 11:46
lqj12: cooooooooool Details Apr 08 21:34
Yunhan Huang: 这个功能是如何实现的? Details Apr 08 13:23