【OpenCV3.3】编译源码并搭建VS2017+Windows开发环境
来源:互联网 发布:gdi 高级编程 pdf 编辑:程序博客网 时间:2024/05/21 15:42
编译OpenCV的源码并不复杂,或者说十分简单(相对于部分老项目而言),并且对Visual Studio的支持也很友好,但首次编译的话对整个流程以及过程中一些开关可能会存在一些疑问。如果你不想自行编译也可以使用官方预编译好的文件,但是有些模块可能是用不到的,所以我们还是希望能尽可能自定义模块。
本文假设读者已经安装了 CMake 和 Python (2.x或3.x)
一、准备资源
- opencv-3.3.0-vc14.exe,建议使用sourceforge下载,因为相比github这玩意有直链并且有不同镜像可选,可以直接使用第三方下载器下载,速度比较快。
二、准备源码
直接运行下载好的exe,选择解压到的目录,并提取sources文件夹,目录结构大概如下:
三、生成项目
打开CMake GUI,设定好目录选择Configure,然后选好IDE(Visual Studio 2017 WIN64)并Finish,等待初始配置完成(生成cvconfig.h)...
正常情况下直到Configuring done是不会发生错误的,然后上面配置项是红色的,提示有些东西需要人工改动,基本步骤就是查看输出,如果发现有外部库找不到,比如"A library with XXX API not found"或者"Could NOT find XXX (missing XXX)"之类的,根据需求把相应的库的路径加上,或者不需要的话直接去掉相关依赖的编译,还可以做到0 warnings多好的事情~
这里大概有几个提示:
- 首先因为我们是当成库使用,不会去调试OpenCV本身,所以把和最后开发无关的开关关掉,比如BUILD_DOCS,BUILD_EXAMPLES,BUILD_XXX_TESTS,BUILD_opencv_ts(一些单元测试代码),BUILD_PACKAGE (CPACK_BINARY_XXX,CPACK_SOURCE_XXX),INSTALL_XXX
- 前面说了C++ 11特性支持,当然是选择打开它,ENABLE_CXX11
- 为了方便项目配置和调试,在生产环境中建议打开BUILD_opencv_world,把各OpenCV模块编译成一个世界模块,这样最后生成的只有一个.lib或者.dll(后者需要打开BUILD_SHARED_LIBS开关),但在发行版本中建议按需引入相应模块以减少体积(除非你每个模块都有使用到)。
- 如果你不涉及音视频处理,可以关掉相关模块,大概包括BUILD_opencv_video,BUILD_opencv_videoio,BUILD_opencv_videostab,WITH_1394,WITH_GSTREAMER_XXX
部分编译开关解释
知道了上述内容也就对OpenCV整体框架有所了解了,自定义完OpenCV编译模块后我们再次点击Configure修改配置,CMake应该就没错误输出也不显示红色了,然后点击Generate生成VS2017项目文件,最后Open Project打开就能回到熟悉的VS环境中了,直接右键解决方案等它Build完就好了(ps: 生成的文件放在 build\lib\ 和 build\bin\ 目录下,最后通过INSTALL这个项目把相关文件(.h、.dll、.lib等)拷贝到CMAKE_INSTALL_PREFIX目录,如果你没有Build INSTALL这个项目是不会拷贝的,跟make之后没执行make install情况一样)。
四、项目配置
VS作为几乎公认的宇宙最强IDE,在项目配置上具有十分友好的用户接口,支持导出项目模版或者继承项目属性表.props,避免项目的重新配置以及过度依赖系统环境变量。因为继承项目属性表方式相对而言比较灵活,这里大概讲讲怎样配置一个OpenCV的公共项目属性表,以后新建项目或者移动OpenCV目录只需要引用或者修改这个文件就行了,不需要改动其它配置。
- 在VS主界面选择View->Property Manager打开属性管理器视图,选择你要配置的任一个项目,选中全部配置(Debug & Release,这是为了让全部配置都继承同一个属性表),右键,在弹出的框选择Add New Project Property Sheet进行新建属性表 (可以看到引用现有属性表操作类似,但是我们还没有属性表,所以得新建一个):
- 然后右键我们刚才新建的属性表打开属性设置,可以看到和项目属性设置界面差不多,就是多了个User Macros,这是用来添加自定义变量的,我们随便添加一个OPENCV_INSTALL_DIR,结果如下:
- 接着在VC++ Directories分别设置Include和Library目录 (Evaluated value如果没显示出路径,请检查上一步操作添加的变量名是否正确保存了;此外记得勾选从父项目继承,Inherit from parent or project defaults):
Include目录: $(OPENCV_INSTALL_DIR)\include
Library目录: $(OPENCV_INSTALL_DIR)\$(PlatformShortName)\vc15\lib (vc15比较坑,因为并没有宏的值是vc15或15)
Include目录配置示例
Library目录配置示例- 最后记得保存就好了,以后新项目只需要引用刚才新建的属性表就好了。然后在项目中引用相应的lib,但是lib有两种版本,这里提供一个很方便的宏:
#ifdef _DEBUG# define RLIB_IMPORT_LIBRARY(a) __pragma(comment(lib, a "d.lib"))#else# define RLIB_IMPORT_LIBRARY(a) __pragma(comment(lib, a ".lib"))#endif // _DEBUG// 用法如下RLIB_IMPORT_LIBRARY("opencv_world320") // world 其实是 All In One// RLIB_IMPORT_LIBRARY("opencv_core330")// RLIB_IMPORT_LIBRARY("opencv_highgui330")// RLIB_IMPORT_LIBRARY("opencv_imgproc330")// RLIB_IMPORT_LIBRARY("opencv_imgcodecs330")// RLIB_IMPORT_LIBRARY("opencv_features2d330")// RLIB_IMPORT_LIBRARY("opencv_calib3d330")// RLIB_IMPORT_LIBRARY("opencv_objdetect330")最后一个问题就是如果你编译的不是静态库而是DLL的话,建议把路径 D:\OpenCV3.3\build\install\x64\vc15\bin 加到系统环境变量PATH里,方便调试,省得每次拷贝DLL到应用程序目录。
五、参考文献
太多了,这里就不一一列举了,衷心感谢相关作者的分享。
- 【OpenCV3.3】编译源码并搭建VS2017+Windows开发环境
- 【OpenCV3.3】编译源码并搭建VS2017+Windows开发环境
- 【OpenCV3.3】搭建VS2017+Android开发环境
- OpenCV3.2.0+VS2017环境搭建
- OpenCV3.2.0+VS2017环境搭建
- VS2017+Opencv3.3+Opencv_contribute编译
- OpenCV3.3 VS2017环境配置
- Win10专业版+VS2017+OpenCV3.3.0环境搭建
- Win10下OpenCV环境搭建(VS2017+OpenCV3.2.0)
- WINDOWS+CMAKE+VS2017编译OLLVM并整合到VS2017 NDK
- VS2017 Xamarin.IOS windows环境搭建
- 拜小白教你OpenCV3.2.0+VS2017开发环境配置
- opencv3.3+vs2017
- openCV3.3 + VS2017
- 配置opencv3.3+vs2017
- Visual Studio(VS2017)编译并配置C/C++-libcurl(7.55.1)开发环境
- 在CENT OS 7.0 64位系统上源码编译安装OPENCV3.0以及CUDA7.0,支持CUDA开发,并集成QT5.5.0的开发环境
- Windows下使用VIM,搭建Mainframe开发环境(七)---编译并修改源文件
- JSP内置对象
- HDU.1846 Brave Game (博弈论 巴什博弈)
- build-tools\21.1.1\aapt.exe'' finished with non-zero exit value 1
- eclipse雕虫小技一:eclipse打开文件目录
- shell学习七-----通过取串长度压测命令执行时间
- 【OpenCV3.3】编译源码并搭建VS2017+Windows开发环境
- js 中的加法和乘法
- 2017"百度之星"程序设计大赛
- tensorflow运维(1):tensorboard:No graph definition files were found,没有找到graph定义文件
- 《大护法》—— 花生镇里的成人童话
- Spring Boot 不允许加载iframe问题解决
- HDU 6069 求区间[L,R]每个数的k次方的因子数之和
- 基于RandomAccessFile实现断点文件下载功能
- 【OpenCV3.3】搭建VS2017+Android开发环境