OPENCV立体标定.pdfVIP

  1. 1、本文档共70页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OPENCV立体标定

OpenCV学习笔记(16)双目测距与三维重建的OpenCV 实现问题集锦(一)图像获取与单目定标 分类: 机器视觉 2010-10-24 08:03 5610 人阅读 评论(17) 收藏 举报 双目测距的基本原理 如上图所示,双目测距主要是利用了目标点在左右两幅视图上成像的横向坐标直接 存在的差异(即视差 )与目标点到成像平面的距离Z存在着反比例的关系: Z=fT/d 。“@scyscyao :在OpenCV中,f 的量纲是像素点,T的量纲由定标板棋盘 格的实际尺寸和用户输入值确定,一般是以毫米为单位(当然为了精度提高也可以 设置为 0.1 毫米量级),d=xl-xr的量纲也是像素点。因此分子分母约去,Z 的量纲 与T相同。 ” 假设目标点在左视图中的坐标为(x,y ),在左右视图上形成的视差为d,目标点在 以左摄像头光心为原点的世界坐标系中的坐标为(X,Y,Z ),则存在上图所示的变换 矩阵 Q,使得 Q*[x y d 1]’ = [X Y Z W]’ 。 “@scyscyao :为了精确地求得某个点在三维空间里的距离Z,我们需要获得的参数 有焦距f 、视差d、摄像头中心距Tx 。如果还需要获得X坐标和Y坐标的话,那么还需 要额外知道左右像平面的坐标系与立体坐标系中原点的偏移cx和cy 。其中f, Tx, cx 和cy可以通过立体标定获得初始值,并通过立体校准优化,使得两个摄像头在数学 上完全平行放置,并且左右摄像头的cx, cy和f相同(也就是实现图 2 中左右视图完全 平行对准的理想形式)。而立体匹配所做的工作,就是在之前的基础上,求取最后一 个变量:视差d(这个d一般需要达到亚像素精度)。从而最终完成求一个点三维坐标 所需要的准备工作。在清楚了上述原理之后,我们也就知道了,所有的这几步:标 定、校准和匹配,都是围绕着如何更精确地获得 f, d, Tx, cx 和cy 而设计的 。 ” 一、图像的获取 1. 如何打开两个或多个摄像头? 可以通过OpenCV的capture类函数或者结合DirectShow来实现双摄像头的捕获,具 体可见我的读书笔记《OpenCV学习笔记(6 )基于 VC+OpenCV+DirectShow 的 多个摄像头同步工作 》。文中曾提及不能用cvCreateCameraCapture 同时读取两 个摄像头,不过后来一位研友来信讨论说只要把摄像头指针的创建代码按照摄像头 序号降序执行,就可以顺利打开多个摄像头 ,例如: view plaincopy to clipboardprint? 1. CvCapture* capture2 = cvCreateCameraCapture( 1 ); 2. CvCapture* capture1 = cvCreateCameraCapture( 0 ); CvCapture* capture2 = cvCreateCameraCapture( 1 ); CvCapture* capture1 = cvCreateCameraCapture( 0 ); 采用 DirectShow 的方式读入时: view plaincopy to clipboardprint? 1. camera2.OpenCamera(1, false, 640,480); 2. camera1.OpenCamera(0, false, 640,480); camera2.OpenCamera(1, false, 640,480); camera1.OpenCamera(0, false, 640,480); 这样就可以同时采集两个摄像头。我也验证过这种方法确实有效,而且还解决了我 遇到的 cvSetCaptureProperty 调整帧画面大小速度过慢的问题。当摄像头的打开或 创建代码按照摄像头序号从 0 开始以升序编写执行时,使用 cvSetCaptureProperty 就会出现第一个摄像头(序号为 0 )的显示窗口为灰色(即无图像)、且程序运行 速度缓慢的现象。而改为降序编写执行后,则能正常、实时地显示

文档评论(0)

ldj215322 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档