VS+CMake+opencv3+opencv_contrib
1、环境及准备:
1) VisualStudio
2) CMake下载地址:https://cmake.org/download/
3) OpenCV下载地址:https://github.com/opencv/opencv/releases
4) OpenCV_contrib下载地址:https://github.com/opencv/opencv_contrib/releases
注:本文用的版本是VS2015(也即VC14)、opencv-3.2.0源码、opencv_contrib-3.2.、cmake-3.5.2-win32-x86,opencv和opencv_contrib版本要一致
也可以下载opencv-xxx.exe,双击后得到官方编译好的版本,可以直接进行vs配置,参考浅墨的博客http://blog.****.net/poem_qianmo/article/details/19809337,不过3.x.x.exe版本不包含contrib库,如果用到的话仍需自行编译
2、用CMake生成OpenCV的VS解决方案
(1) 点击 cmake-gui.exe,运行CMake;
(2) 点击“Browse Source…”按钮选择源代码路径; 我们可以发现,此路径下有一个CMakeLists.txt文件,cmake可以根据这个配置文件,通过不同的编译器选择,来生成不同的解决方案,VisualStudio的编译器对应的就生成Visual
Studio版的sln解决方案。
点击“Browse Build…”按钮选择生成路径:
(3) 第一次Configure,在弹出的对话框中选择生成项目版本和编译器:
然后,单击“finish”按钮,cmake开始第一次源代码配置过程。
如果网络不好的话可能有一些文件下载不下来,如:ippicv_windows_20151201.zip,解决办法是自行找资源放到对应位置;如果提示hash值不对,解决办法是找到对应文件并删除,重新configure。
看到进度条读到尽头,出现了Configuring done字样,第一次的源码配置就完成了。
(4) 在红色框中修改需要生成的项目及属性
看下是否找到你python的include等路径
如果需要编译opencv_contrib,则添加:
上边是对应于编译动态链接库版本的,如果编译静态链接库版本,需要取消BUILD_SHARE_LIBS
为了opencv最终生成的库打包成一个world,需要选择BUILD_opencv_world
再次点击Configure,这次的配置是很快的,再次出现Configuring
done字样,并且红色的选中部分都正常了。
(5)
点击Generate ,看到Generating done字样,就表示大功告成,可以去之前我们指定的目录下寻找我们生成的解决方案了。
注:我们生成的sln工程,只是连接到了opencv安装路径下的源文件而已,工程本身并不大。
3、编译源代码,生成我们所需要的动态链接库
(1) 双击生成目录下OpenCV.sln,打开解决方案;
(2) 编译生成Debug库:在解决方案资源管理器窗口中选择ALL_BUILD项目,右键进行“生成”
(3) 编译生成Release库:从Debug模式切换到Release再次对项目进行生成;
其实我们编译OpenCV,就是得到了一些二进制的生成文件,如dll、lib、exe。
在debug下编译的,则在工程目录的bin\debug和lib\debug生成
在release下编译的,则在工程目录的bin\release和lib\release生成(4) 在CMakeTargets工程中的INSTALL上右键选择Project
Only
->Build Only INSTALL
。
则在where to build the binaries中设置的路径下会多一个install文件夹,里面生成编译好的opencv文件,如下:
可以先关掉VS了~
4、配置Opencv环境变量
对于32位系统,添加:{opencv编译生成目录}\install\x86\vc14\bin;如我的是E:\opencv-3.2.0\opencv-3.2.0\build\vc14\install\x86\vc14\bin;
对于64位系统,添加:{opencv编译生成目录}\install\x86\vc14\bin;{opencv编译生成目录}\install\x64\vc14\bin;5、工程包含(include)目录的配置
<1>打开visual studio,新建win32控制台项目,取个名字,比如叫OpenCV_test,然后选好路径,点确定。<2>点一次“下一步”。
<3>勾上空项目那个勾。
<4>接着在解决方案资源管理器的【源文件】处右击->添加->新建项,准备在工程中新建一个cpp源文件。
<5>选定C++源文件,取个名字,比如叫“displayImage.cpp”,然后点【添加】,那么,一个新的cpp文件就添加到了工程中。
<6>在属性管理器中进行一次配置,以后新建的工程就不用再额外的进行重新配置了。在菜单栏里面点<视图>--<属性管理器>,那么就会在visual studio中多出一个属性管理器工作区来。
<7>在新出现的“属性管理器”工作区中,点击项目->Debug|Win32->Microsoft.Cpp.Win32.user(右键属性,或者双击)即可打开属性页面。
<8>打开属性页面后,就是一番配置了。
首先是在【通用属性】 ->【VC++目录】 ->【包含目录】中添加3个目录:
注意,如果用的exe版本且不自己编译的话,添加的include路径类似这样:
$(opencv)\build\include;
$(opencv)\build\include\opencv;
$(opencv)\build\include\opencv2;
工程库(lib)目录的配置
同样,如果用exe版本且不自己编译的话,添加的lib路径类似这样:$(opencv)\build\x86\vc14\lib;
这里提一点,不管是32位还是64位操作系统,配置选择什么跟64位还是32位系统没有直接的关系,而是在于你在编译你的程序的时候是使用那个编译器:
编译器选的是win32,就用x86;编译器选的是X64,就用X64。不过一般情况下,都是用的win32的X86编译器。
链接库的配置
选择【通用属性】 ->【链接器】->【输入】->【附加的依赖项】,添加:
opencv_aruco320d.lib
opencv_bgsegm320d.lib
opencv_bioinspired320d.lib
opencv_calib3d320d.lib
opencv_ccalib320d.lib
opencv_core320d.lib
opencv_datasets320d.lib
opencv_dnn320d.lib
opencv_dpm320d.lib
opencv_face320d.lib
opencv_features2d320d.lib
opencv_flann320d.lib
opencv_fuzzy320d.lib
opencv_hdf320d.lib
opencv_highgui320d.lib
opencv_imgcodecs320d.lib
opencv_imgproc320d.lib
opencv_line_descriptor320d.lib
opencv_ml320d.lib
opencv_objdetect320d.lib
opencv_optflow320d.lib
opencv_phase_unwrapping320d.lib
opencv_photo320d.lib
opencv_plot320d.lib
opencv_reg320d.lib
opencv_rgbd320d.lib
opencv_saliency320d.lib
opencv_shape320d.lib
opencv_stereo320d.lib
opencv_stitching320d.lib
opencv_structured_light320d.lib
opencv_superres320d.lib
opencv_surface_matching320d.lib
opencv_text320d.lib
opencv_tracking320d.lib
opencv_video320d.lib
opencv_videoio320d.lib
opencv_videostab320d.lib
opencv_xfeatures2d320d.lib
opencv_ximgproc320d.lib
opencv_xobjdetect320d.lib
opencv_xphoto320d.lib
opencv_aruco320.lib
opencv_bgsegm320.lib
opencv_bioinspired320.lib
opencv_calib3d320.lib
opencv_ccalib320.lib
opencv_core320.lib
opencv_datasets320.lib
opencv_dnn320.lib
opencv_dpm320.lib
opencv_face320.lib
opencv_features2d320.lib
opencv_flann320.lib
opencv_fuzzy320.lib
opencv_hdf320.lib
opencv_highgui320.lib
opencv_imgcodecs320.lib
opencv_imgproc320.lib
opencv_line_descriptor320.lib
opencv_ml320.lib
opencv_objdetect320.lib
opencv_optflow320.lib
opencv_phase_unwrapping320.lib
opencv_photo320.lib
opencv_plot320.lib
opencv_reg320.lib
opencv_rgbd320.lib
opencv_saliency320.lib
opencv_shape320.lib
opencv_stereo320.lib
opencv_stitching320.lib
opencv_structured_light320.lib
opencv_superres320.lib
opencv_surface_matching320.lib
opencv_text320.lib
opencv_tracking320.lib
opencv_video320.lib
opencv_videoio320.lib
opencv_videostab320.lib
opencv_xfeatures2d320.lib
opencv_ximgproc320.lib
opencv_xobjdetect320.lib
opencv_xphoto320.lib