相机标定(实践)

本博客为原创,转载请注明来自Jasmine_shine的专栏。

关于相机标定,最常用的方法莫过于matlab和opencv了。这两者的目标都是得到相机的内参矩阵(3*3)和误差矩阵(5*1),至于原理我还来不及研究,已经迫不及待的想要了解怎么采用这两种现成的工具怎么实现了?

首先,在标定之前先采集标定板的图片,连接好要标定的摄像头,做好一个标定板。opencv自带了一个标定板,你可以打印出来的,这个文档存放在sources文件夹下,如我的存放路径是:D:\Program Files\opencv\sources\doc\patten.png。按照旋转、平移的角度,转动标定板,拍摄一组照片,作为标定的依据。记住,尽量让标定板占满整幅画面。

接下来就是标定工具的选择了,相对来说,opencv的比较繁琐一些,下面主要讲解Opencv是如何实现标定的?至少先把这一套流程走完先。

opencv自带了标定的2个函数,存放路径在D:\Program Files\opencv\sources\samples\cpp,分别是imagelist_creator.cpp,用于生成图片的序号;和calibration.cpp,用于生成内参和误差矩阵。具体用法是:
在vs2010下新建控制台应用程序的工程,载入imagelist_creator.cpp文件,编译生成exe文件。进入dos系统,也就是cmd.exe,进入你所在的工程,分别执行

工程名.exe imagelist.xml a1.png a2.png a3.png a4.png a5.png

这样就会生成一个imagelist.xml的文件了。文件内容大致是:

<?xml version="1.0"?>
<opencv_storage>
<images>
  "1.jpg" "2.jpg" "3.jpg" "4.jpg" "5.jpg" "6.jpg" "7.jpg" "8.jpg"
  "9.jpg" "10.jpg"</images>
</opencv_storage>

现在已经生成了图片的序列文件了,下一步就是采用calibration生成内参矩阵和误差矩阵。同理,新建一个win32控制台应用程序的工程,加载calibration.cpp,并编译生成可执行文件*.exe,在cmd下输入

*.exe -w 8 -h 6 -s 0.025 -o camera.yaml -op -oe imagelist.xml

-w 8 是指标定板的长边的内角点数,-h 6 是指标定板宽的内角点数,同时把imagelist.xml和所有的图片放到与*.exe同一路径下,目的是为了方便找到这些文件。回车后就会生成一个camera.yaml的文件,大致如下:

%YAML:1.0
calibration_time: "12/11/15 10:29:34"
nframes: 9
image_width: 640
image_height: 480
board_width: 8
board_height: 6
square_size: 1.
flags: 0
camera_matrix: !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [ 8.1851236466343710e+002, 0., 3.0903984677764441e+002, 0.,
       8.1746895098846801e+002, 2.0063288110431276e+002, 0., 0., 1. ]
distortion_coefficients: !!opencv-matrix
   rows: 5
   cols: 1
   dt: d
   data: [ 2.5939251617159848e-001, -2.2449638446166724e+000,
       3.7120604052127667e-003, 6.2924995823829537e-004,
       4.0328352932945775e+000 ]

除了以上这些,还会生成一些文件。因为没有用到,不作解释。
这样,采用opencv得到了相机的内参和误差矩阵。注意,在dos下的命令不同于linux,进入e盘就直接输入

e:

参看e盘下的所有文档,键入

dir

关于matlab的工具箱就稍微简单一些,可以参考,http://www.vision.caltech.edu/bouguetj/calib_doc/。下载工具箱后直接打开calib.m,按照读取图片,提取角点的顺序进行。可能在官网上不能直接下载工具箱,建议到I love matlab或其他网站下载。

下一讲:相机校正

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值