在Windows10上,要在C++项目中使用OpenCV有2种方法:
- 在官网下载Win pack,然后运行解压,得到已经编译好的OpenCV链接文件,在VS的项目属性中,添加相应的OpenCV目录与依赖项;
- 在官网下载OpenCV源码,利用CMake与VS编译生成链接文件,然后用CMake配置并生成项目属性。
在上一篇博客中介绍了第一种方法,本篇博客介绍第二种方法。
1. OpemCV源码下载
在OpenCV官网下载某个版本的OpenCV的Sources:
下载后解压(我的解压路径为D:\opencv-3.4.2),我们也可以再下载一份相同版本的OpenCV补充包:opencv_contrib,它里面有些新的算法实现,下载连接:https://github.com/opencv/opencv_contrib/releases 。请下载和OpenCV相同的版本,然后可以解压到同一路径下:
2. CMake配置
(1) 配置路径与Generator
打开CMake(如果解压路径是系统盘,可能需要以管理员权限打开),设置源码目录与构建目录,然后点击COnfigure:
若构建目录不存在,会弹出提示问是否新建,点击Yes。然后在弹出的提示框内选择generator,我的是64位VS20107:
(2) 修改CMake变量
点击Finish后开始配置,由于会下载一些文件,所有耗时较久。完成后,会有许多红色的变量,我们需要修改几个:
-
OPENCV_EXTRA_MODULES_PATH 设置为opencv_contrib下的modules路径:
-
BUILD_EXAMPLES 勾选上这个,可以编译生成官方提供的samples,便于之后的学习
注意:很多博客中说要勾选BUILD_opencv_world,以便把所有链接文件打包成一个,这仅仅适应于没有opencv_contrib的源码编译。当我们把Opencv源码与opencv_contrib一起编译时,就不能勾选这个,否则VS生成时会报错找不到.lib文件。
(3) Generate
设置完成之后再次点击Configure,直到没有红色变量。然后点击Generate,最后点击open Project。
3. VS2017编译生成
在打开的VS2017中,首先选择Debug与x64,然后右键INSTALL,然后点击生成。等待一段时间后,若显示全部成功则生成成功:
然后选择Release与x64,同样右键INSTALL,再点击生成,全部成功后,我们可以打开构建目录下的install\x64\vc15\lib,发现下面的每个lib都有2个版本:
4. 环境变量:
- 将构建目录下的install\x64\vc15\bin(即D:\opencv-3.4.2\build\install\x64\vc15\bin)加入系统环境变量path。
- 新建系统环境变量 OpenCV_DIR,值为构建目录,即D:\opencv-3.4.2\build。
5. 项目配置
至此,OpenCV的环境就已经全部搭建好了。要在项目中使用OpenCV有2中方法
5.1 CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project( ImageStitcher )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( ImageStitcher ImageStitcher.cpp )
target_link_libraries( ImageStitcher ${OpenCV_LIBS} )
其中的项目名与文件名相应改变。
5.2 VS中进行项目配置
- 选择 Release/Debug 与x64
- 打开项目属性,vc++目录 --> 包含目录, 添加D:\opencv-3.4.2\build\install\include, D:\opencv-3.4.2\build\install\include\opencv2
- vc++目录 --> 库目录,添加D:\opencv-3.4.2\build\install\x64\vc15\lib
- 链接器 --> 输入 --> 附加依赖项:
opencv_aruco342.lib
opencv_bgsegm342.lib
opencv_bioinspired342.lib
opencv_calib3d342.lib
opencv_ccalib342.lib
opencv_core342.lib
opencv_datasets342.lib
opencv_dnn342.lib
opencv_dnn_objdetect342.lib
opencv_dpm342.lib
opencv_face342.lib
opencv_features2d342.lib
opencv_flann342.lib
opencv_fuzzy342.lib
opencv_hfs342.lib
opencv_highgui342.lib
opencv_imgcodecs342.lib
opencv_imgproc342.lib
opencv_img_hash342.lib
opencv_line_descriptor342.lib
opencv_ml342.lib
opencv_objdetect342.lib
opencv_optflow342.lib
opencv_phase_unwrapping342.lib
opencv_photo342.lib
opencv_plot342.lib
opencv_reg342.lib
opencv_rgbd342.lib
opencv_saliency342.lib
opencv_shape342.lib
opencv_stereo342.lib
opencv_stitching342.lib
opencv_structured_light342.lib
opencv_superres342.lib
opencv_surface_matching342.lib
opencv_text342.lib
opencv_tracking342.lib
opencv_video342.lib
opencv_videoio342.lib
opencv_videostab342.lib
opencv_xfeatures2d342.lib
opencv_ximgproc342.lib
opencv_xobjdetect342.lib
opencv_xphoto342.lib
当使用动态链接的方法,若想要把生成的EXE文件在没有安装OpenCV的电脑上面运行时,需要添加所依赖的.dll文件。
查看依赖的dll文件的方法:打开适用于 VS2017的x64本机工具命令提示,cd到exe所在路径,输入dumpbin /dependents test.exe