分享一些OpenCV实现立体视觉的经验

 

尝试用OpenCV来实现立体视觉也有一段时间了,主要的参考资料就是Learning OpenCV十一十二章和OpenCV论坛上一些前辈的讨论。过程中磕磕碰碰,走了不少弯路,终于在前不久解决了最头大的问题,把整个标定、校准、匹配的流程调试成功。(虽然还有一些问题至今尚未搞清)

在这里写这篇文章,第一方面是给自己一个总结,第二方面是感觉OpenCV立体视觉方面的资料还是相当零散和不完整,新手入门需要花很长时间才能摸索出来,第三方面,也是自己在过程中有些问题仍旧迷迷糊糊,希望可以抛砖引玉。

 

1. 摄像头

我用的摄像头是淘宝上买的三维摄像头,两个USB Camera加一个可调节的支架。实物照片如下

1.1 三维摄像头

1.1 三维摄像头实物图

 

 

USB摄像头的OpenCV驱动可以参考以下链接

http://www.opencv.org.cn/index.php/使用DirectShow采集图像


将上面代码复制到自己的工程之后还需要对工程或者编译环境做一下设置

 

VC6下的详尽设置可以见代码的注释(修改工程的属性)

VS2008中的设置也可以参照代码注释中VC++2005的设置(修改编译环境)

 

 

2. 标定

由于OpenCVcvStereoCalibrate总是会得到很夸张的结果(见下文5.1问题描述),所以最后还是决定用BouguetMatlab标定工具箱立体标定,再将标定的结果读入OpenCV,来进行后续图像校准和匹配。

Matlab标定工具箱的参考链接如下:

http://www.vision.caltech.edu/bouguetj/calib_doc/

上面有详细的使用步骤,用起来相当的方便。

 

以下是我个人用Matlab工具箱进行立体标定的步骤,供参考,如果需要更详细步骤的话还是参照上面的链接

 

 

Matlab工具箱的文件copy到对应目录下,把所要标定的棋盘图也放到.m文件所在的目录下,然后在Matlab命令行窗口中打入calib_gui,选择Standard之后便出现以下窗口

2.1. calib_gui

2.1. calilb_gui面板

 

我们先对右摄像头的标定,所以先把从右摄像头上采集到的棋盘图复制到工具箱目录下。

点击Image names, 命令行窗口会提示你输入图片的basename以及图片的格式(比如你图片文件名是right1, right2, …, right10basename就是right),然后Matlab会自动帮你读入这些图片,如下图所示,可以看到,读入了10幅右摄像头的棋盘图。

 

采集棋盘图的时候要注意,尽量让棋盘占据尽可能多的画面,这样可以得到更多有关摄像头畸变方面的信息

 

2.2.basename

2.2. 图像basename读入

 

2.3 棋盘图

2.3. 读入的棋盘图

 

 

  • 24
    点赞
  • 287
    收藏
    觉得还不错? 一键收藏
  • 193
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值