不断更新的OpenCV视觉库,包含了大量较新的计算机视觉方面的研究成果,很多新的算法都放在了OpenCV_contrib,即扩展模块。这些新算法使用了OpenCV的数据结构或其它算法来做支撑,很多并不能单独分离直接使用,这时候我们就需要编译OpenCV和扩展模块。
这篇博客总结了如何编译安装扩展模块,并且进行单步调试OpenCV源码的方法。
扩展模块下载:https://github.com/opencv/opencv_contrib
工具:Cmake+Visual Studio
1. 选择源码路径和build路径,如下图
为了方便管理,这里build路径最好给出明确的名字。
2. 点击Configure,填写扩展模块module路径
找到OPENCV分组下的OPENCV_EXTRA_MODULE_PATH,填写路径为扩展模块下modules文件夹,如下图:
这里有两点需要注意:
第一:修改安装路径,找到CMAKE_INSTALL_PREFIX是后续安装的路径,可以按自己喜欢修改。
第二:这时候最好去掉BUILD_EXAMPLES,BUILD_PERF_TEST,BUILD_TEST。对于后续使用opencv,完全没有影响,还可以减少编译项,加快后面编译的速度。
3. 设置路径,再次Configure
这一步很关键,确保扩展模块的安装正确前提是各种目录在这一步配置好。
这里的路径是指:你需要安装的模块的第三方库。比如Viz模块依赖VTK,SFM模块依赖ceres,这些依赖库是需要提前编译安装好的。在cmake路径中搜索对应依赖库的名字,找到对应的项。一般来说需要设置路径的有三种:
xx_DIR: 这里路径填写为能够找到依赖库的xxConfig.cmake文件,如果填写错误,cmake的错误输出也会提示无法找到xx对应cmake文件
xx_INCLUDE_DIR: 依赖库头文件所在目录
xx_LIBRARIES: 依赖库的lib文件,手选
如果填写的路径正确,那么点击Configure成功后,查看输出信息,如下图。To be built中会有对应的模块名字,这样就算路径配置成功了
注:configure这一步,cmake会下载一些文件,可能会因为网络导致文件下载失败(有条件挂上VPN比较好)。遇到这种情况,如果是某个模块部分文件下载失败,不会影响Configure和Generate,具体问题可以再具体解决,比如xfeature模块中文件下载失败,可以后续补上具体文件。
4. Generate
点击生成即可,Configure没问题,这一步也会没问题。
5. Visual Studio编译安装(Debug和Release都做一次)
找到之前制定的build文件夹,打开OpenCV.sln,右击解决方案->生成ALL_BUILD。接下来就是等待编译完成。
潜在问题:因为每个模块可能依赖于其它模块生成的lib,有可能前一模块还没完成,后一模块就在编译。这种情况时,查看输出,找到缺少的lib对应项目,单独生成一下,再开始ALL_BUILD就会没问题。(原因考虑是VS对于多项目的编译方式造成,不同项目都遇到了,但是没有深究,以上方法就解决了问题)
上述完成后,找到INSTALL项目,生成INSTALL,就可以安装在之前制定的文件夹中。
6. 使用时的配置
新建一个项目时,需要配置一下几项:
- 附加包含目录:项目属性->C/C+±>常规->附加包含目录,填写安装目录下的include路径。
- 附加库目录:项目属性->链接器->常规->附加包含目录,填写安装目录下的lib路径。
- 可执行文件目录:项目属性->VC++目录->可执行文件目录,填写安装目录下bin。
*7. 单步调试源码
如果想在使用时,使用单步调试加入相应模块的源码,则需要再添加一个目录:
可执行文件目录:项目属性->VC++目录->可执行文件目录,填写build文件夹下…\bin\Debug路径。注意这里和第六步中不同,因为这个文件夹下含有pbd文件,可以让我们进行单步调试,更好地帮助我们学习源代码的执行过程与算法原理。
同时Release文件夹下也有pbd文件,一般来说Release模式下不能调试,这里留个问题,等我找到答案,再来解释。