起因:

1. 双目立体视觉中双目深度估计是非常重要且基础的部分,而传统的立体视觉的算法基本上都在opencv中有相对优秀的实现。同时考虑了性能和效率。因此,学习使用opencv接口是非常重要的。

2. 但对一个工具使用到一定程度后,有时候需要进行内置算法的改进,此时需要对opencv及外部依赖模块进行重编译。

双目深度估计传统算法流程:

A. 固定相机对(严格固定!),制作高精度棋盘格,挑选合适光源,选择合适的拍摄角度对棋盘格进行拍摄取样

B. 使用matlab或opencv单目标定两个相机,采用如张正友相机标定算法。得到相机各自内参。

C. 使用matlab或opencv双目标定相机对,评估重投影误差是否符合要求,检测角点的提取正确性。保存所有标定结果。

D. 使用标定结果对同一组相机拍摄的图片对进行双目矫正,包含单目矫正以及ROI区域裁剪,得到行对齐的左右视图。

E. 使用上述矫正后的图像(rectified views)采用BM,SGBM等算法进行深度估计,得到disparity map(视差图)。

F. 视差图的倒数(注意除零错误)就是深度图。

OpenCV及其附加模块的编译:

(前置条件:安装对应Opencv支持的版本的visual studio)

1. 下载cmake,免安装绿色版

2. 下载opencv对应平台的版本,运行解压得到对应平台的源码

3. 创建build文件夹

4. 运行cmake,点击configure,指定编译器与平台,如VS2015就选择VC14 visual studio 2015 x64.

5. 等待第一遍配置完成反馈结果,对于cpu平台,取消勾选所有包含cuda,cublas,cufft这些gpu加速相关模块。

6. 在EXTRA_MODULES选项中选择opencv-contrib的modules文件夹

7. 再次点击configure,等待所有的红色(错误)选项消失

8. 点击generate,生成待编译项目,对于VS2015,则生成.sln解决方案文件。

9. 点击open project进入visual studio

10. 在VS中: 生成(build) -> 管理项目配置 -> Debug改为Release(因为一般的系统上都只有python模块的release版,编译debug模式会出错)

11. 在VS中:项目资源中选择ALL_BUILDS右键单击选择【生成】,等待约20分钟。

12. 在VS中,项目资源中选择INSTALL右键单击选择【生成】,等待10秒。

13. 完成opencv及其附加库的编译。

14. 将build文件夹下的install文件夹下的vc14/bin/整个绝对路径添加到电脑的系统环境变量(%PATH%)的末尾。

15. 在使用opencv的项目中,项目属性-> c++库目录配置 -> include目录 & lib 目录

16. 如果发现部分lib找不到链接库,那表明在configure阶段就因为平台不支持而没有进行加入待编译模块列表。注意初次出现红色的那一步,查看错误信息,按照信息提示安装相应的依赖项,重新configure即可。

双目深度估计传统算法流程及OpenCV的编译注意事项的更多相关文章

  1. ui2code中的深度学习+传统算法应用

    背景 在之前的文章中,我们已经提到过团队在UI自动化这方面的尝试,我们的目标是实现基于 单一图片到代码 的转换,在这个过程不可避免会遇到一个问题,就是为了从单一图片中提取出足够的有意义的结构信息,我们 ...

  2. AI系统——机器学习和深度学习算法流程

    终于考上人工智能的研究僧啦,不知道机器学习和深度学习有啥区别,感觉一切都是深度学习 挖槽,听说学长已经调了10个月的参数准备发有2000亿参数的T9开天霹雳模型,我要调参发T10准备拿个Best Pa ...

  3. Imu_tk算法流程及数据采集要求和标定程序参数设置

    Imu_tk算法流程 由于VIO中,普遍使用的是精度较低的imu,所以其需要一个较为准确的内参数和noise的估计.Noise大家通常使用Allan方差进行估计可以得到较为可信的结果,这里不赘述了.内 ...

  4. OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法

    1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry),它属于立体视觉(stereo vision)几何学,立体视觉是计算机视觉的一个分 ...

  5. 深度学习(一)——CNN算法流程

    深度学习(一)——CNN(卷积神经网络)算法流程 参考:http://dataunion.org/11692.html 0 引言 20世纪60年代,Hubel和Wiesel在研究猫脑皮层中用于局部敏感 ...

  6. 深度估计&平面检测小结

    https://yq.aliyun.com/ziliao/582885 最近一段时间已知忙着赶图像分析与理解的项目,在三个星期内强行接触了CNN,MRF,Caffe,openCV在内的很多东西.现在项 ...

  7. 视觉SLAM中的深度估计问题

    一.研究背景 视觉SLAM需要获取世界坐标系中点的深度. 世界坐标系到像素坐标系的转换为(深度即Z): 深度的获取一共分两种方式: a)主动式 RGB-D相机按照原理又分为结构光测距.ToF相机 To ...

  8. 3D深度估计

    3D深度估计 Consistent Video Depth Estimation 论文地址:https://arxiv.org/pdf/2004.15021.pdf 项目网站:https://roxa ...

  9. 一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm)

    一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm) 2017-12-25  16:29:19   对于 A3C 算法感觉自己总是一知半解,现将其梳理一下,记录在此,也 ...

随机推荐

  1. django进阶开发(一)--session

    基于cookie做用户验证时:敏感信息不适合放在cookie中 session依赖cookie session原理 cookie是保存在用户浏览器端的键值对 session是保存在服务器端的键值对 s ...

  2. Win7 指定以某个用户运行某个程式

    登陆的是用户A,想要以用户B执行某个程式,可以在cmd命令符下执行以下语句 runas /user:Domain\UserB  /savecred notepad.exe 说明:/user:的后面即为 ...

  3. keras用法

    关于Keras的“层”(Layer) 所有的Keras层对象都有如下方法: layer.get_weights():返回层的权重(numpy array) layer.set_weights(weig ...

  4. 使用Jmeter连接MySql数据库

    准备条件: 1.在MySql中创建数据库和表 2.MySql的驱动jra包 操作步骤: 1.将MySql的驱动jra包放入Jmetre本地文件夹的lib目录下 2.新建一个线程组,在线程组上 添加-配 ...

  5. iOS进阶之TCP代理鉴权过程

    这段时间接触了网络代理,而自己的任务是完成TCP和UDP的网络代理,所以在这里写些自己的理解吧. 这篇文章先介绍一下TCP代理的鉴权过程(采用的是用户名和密码鉴权),下一篇文章再介绍UDP代理的鉴权过 ...

  6. KVO的使用三:基于runtime实现KVO

    苹果的KVO原理通过isa-swizzling技术实现,本质实现逻辑是在runtime时添加一个子类,重写set方法进行操作,现在我们也基于runtime来实现一个KVO. 首先新建一个Person类 ...

  7. 基于OpenCV做“三维重建”(0)-- OpenCV3.2+VIZ6.3.0在vs2012下的编译和使用

    一.问题提出         ViZ对于显示3维的效果图来说,非常有帮助:我在使用OpenCV进行双目测距的过程中,有一些参数希望能够通过可视化的方法显示出来,所以参考了这方面相关的资料.做了一些实验 ...

  8. {408} client block at 0x005D4D10, subtype 0, 64 bytes long.a CButton object at $005D4D10, 64 bytes long

    现象:mfc动态生成了很多控件,new的,退出时也delet了,但是还是出现了标题的错误 解决:在任何可以执行的地方加代码: CMFCVisualManager ::SetDefaultManager ...

  9. Flutter安装之后cmd运行错误解决

    当把Flutter环境变量配置之后,打开cmd输入:flutter 出现如下错误: 'MySQL' is not recognized as an internal or external comma ...

  10. php rsa

    <?php $res=openssl_pkey_new(); // Get private key $ok = openssl_pkey_export($res, $privkey); // G ...