本人在工作中使用已经很长一段时间了,每次都避免不了需要安装最新或者需要加入某些特殊库而重新编译。但是每次都可能遇到很多麻烦,特地总结下怎么编译分别在window和下。首先在下编译 。(很多都是参考网上方法)
步骤1:安装Visual Studio
https://www.visualstudio.com/vs/older-downloads/下载并安装社区版本。您也可以使用,但如果您打算使用,则必须使用,因为无法使用进行编译。(这里需要注意,在你安装前,一定要查看你需要的库满足当前的版本)
安装的过程就不在这里介绍。需要的可以网上查找。
步骤2:安装CMake
https://cmake.org/download/下载并安装,这里尽量安装最新版本。
在安装过程中,选择将添加到环境变量。
步骤3:安装Anaconda/Miniconda
一般我都选择。因为它附带很多有用的python包,有时在Windows上安装Python模块可能会造成巨大的痛苦。为Python生成OpenCV二进制文件不需要安装Anaconda。你也可以使用官方的Python和NumPy。
https://www.continuum.io/downloads下载并安装Anaconda 64位版本。您可以安装Anaconda 2或Anaconda 3或两者。
安装Anaconda时,请确保您同时检查这两个选项:
将Anaconda添加到我的PATH环境变量中
将Anaconda注册为我的默认Python
步骤4:下载opencv和opencv_contrib
转到https://github.com/opencv/opencv/releases并下载你需要的版本源代码.zip。(需要注意:在选择opencv和opencv_contrib时候版本一定需要一样)
转到https://github.com/opencv/opencv_contrib/releases并下载
提取两个zip文件。虽然您可以在任何地方保持和文件夹,但我建议您将这两个文件保存在同一目录中。我将这两个文件夹放在“我的文档”目录中。
步骤5:使用CMake生成Visual Studio项目
步骤5.1:配置默认标志
在window下面一般选择。这里就是编译的关键了。需要配置很多选项,导致经常失败。在下面的配置过程一定要仔细。
Where is the source code中写入opencv主库(需要注意:如果你是在https://opencv.org下载安装包,那么需要选择文件夹,在下载的直接选择本文件)。where to build the binaries中写入编译存放的文件夹。点击。
它还会要求您选择一个编译器。由于我们使用Visual Studio 2015,我们将选择Visual Studio 14 2015 Win64。
单击完成,并在下一个窗口中保留默认参数。点击完成。现在,CMake将查看系统目录并生成makefile。
步骤5.2:配置其他CMake标志
每一个人的需求都是不一样的,我这里只是针对一般设置。期间会尽可能地寻找存在的第三方库,比如:Ant、clAmdBlas、clAmdFft、CUDA、EIGEN、GLib、GStreamer、MKL、LAPACK、VTK …… 如果有需要,找不到的可以手动指定路径。过程中会自动下载ffmpeg的库文件,因此不联网可能报错。这里只是简单介绍,只是编译了一个加入扩展库。后续可能会加入一些必要库,那时在另起介绍。为了方便配置,这里需要、这两项勾选上,
完成后中间出现大量红色配置,除一些路径配置之外,其中需要注意的几个选项:
打开INSTALL项,INSTALL_C_EXAMPLES「将在install文件夹中编译出一些示例程序(但都是.exe,因此想参考最好还是看sources中的源代码」和INSTALL_PYTHON_EXAMPLES,按需选择吧。INSTALL_TESTS与开发无关
打开OPENCV项,OPENCV_EXTRA_MODULES_PATH给出opencv_contrib中modules目录的路径。
打开BUILD项,
BUILD_opencv_world: 将.lib或者.dll文件统一整合进一个world文件中,方便使用(这里容易导致后续编译出错很大),但若想只使用一部分模块可不勾选以减少体积。
BUILD_SHARED_LIBS: 生成动态链接库dll需要勾,静态不需要勾选
BUILD_DOCS:生成文档,需要安装Doxygen,文档可在官网查看。
BUILD_opencv_ts:一些单元测试代码
BUILD_EXAMPLES:项目文件中会包含sample工程,按需勾选。
简单配置上面几项,然后在点击。
步骤5.3:配置Python标志
如果不需要进行python进行编程,可以跳过。一般CMake会自动找到Python2的路径和Python3文件的路径。但是时候可能会失败,那么需要手动添加。
配置时与python有关项:
BUILD_opencv_python2/3:若CMake找到python2/3路径则会自动勾选。
INSTALL_PYTHON_EXAMPLES:在 …\install\samples\native\python 生成python示例,经比较与sources文件夹下示例相同,可不勾选。
现在再次单击配置。配置完成后,在搜索栏中搜索opencv_python,将自动检查BUILD_opencv_python2和BUILD_opencv_python3。现在我们确定在编译后将生成Python2和Python 3的OpenCV二进制文件。
步骤5.4:生成CMake文件
如果CMake能够配置没有任何错误,它应该说Configuring done。点击Generating。这是非常重要的一点。每当您对CMake生成的配置进行任何更改(检查/取消选中框或更改路径)时,请始终单击configure并生成。
步骤6:编译OpenCV
简易编译
很多教程在此步骤会打开VS进行项目的编译,事实上这里有更便捷的办法,并且若生成Python库必须这样做。在生成项目的文件夹空白处,按住shift的同时点击鼠标右键,点击“在此处打开powershell窗口”,键入如下命令:
Release模式:
cmake.exe--build.--configRelease--targetINSTALL
Debug模式:debug模式需要去掉、和这三项的勾选,经测试若勾选会编译失败。
cmake.exe--build.--configDebug--targetINSTALL
等待编译完成即可。
Visual Studio编译
一旦CMake生成了必要的文件,点击Open Project。如果要求使用哪个应用程序来打开项目,请选择Visual Studio 2017。
在Visual Studio中,您可以在不同的配置设置中构建一个项目。我们将构建具有两种配置的OpenCV:
调试模式 - x64平台
发布模式 - x64平台
要特别注意这一点。当您在Visual Studio中构建解决方案时,请确保该模式为Debug或Release,而platform为x64。(opencv3.x 貌似不支持 32位了)
步骤6.2:配置x64或释放模式
如果x64作为平台选项不存在,请单击调试,然后在下拉菜单中选择配置管理器。
现在点击x86,然后从下拉菜单中选择新建。在出现的新窗口中,选择x64为“新平台”,并在“复制设置”中保留x86。单击确定
同样,如果发布模式不存在,请单击配置管理器 - >调试 - >新建。在“名称”中键入释放并在“复制设置从”中调试。现在我们完成了在Visual Studio中创建构建配置。
步骤6.3:在调试模式下构建OpenCV
选择模式作为调试,并从下拉菜单中定位为x64。在解决方案资源管理器(位于左侧的面板)下,在CMakeTargets下查找INSTALL,右键单击选择构建。
它可能给生成Python二进制错误。你可以忽略它,因为我们将使用从发布模式生成的Python二进制文件。
步骤6.4:在释放模式下构建OpenCV
选择模式作为释放,并定位为x64。再次右键单击CMakeTargets下的“INSTALL”,然后选择Build。一旦生成完成,请检查日志。它应该看起来像这样:
现在我们已经编译了OpenCV,我们将了解如何配置Visual Studio项目以使用OpenCV库。
步骤7:保留build路径下有用的部分
编译路径\install,它的目录结构如下
install
├─etc
│ ├─haarcascades
│ └─lbpcascades
├─include
│ ├─opencv
│ └─opencv2
├─samples
│ └─native
│ └─python
└─x64
└─vc15
├─bin
├─lib
└─samples
其中:
/etc:训练好的分类器,可以用在人脸识别等程序中
/include:opencv需要的头文件
/samples:python的例程(.py),若勾选INSTALL_PYTHON_EXAMPLES会生成
/x64/vc15: 64位vc15所需的动态运行库(bin)、静态运行库(lib)、及例程(samples, .exe)
编译路径\lib\python3\Release
此文件夹下为可在python 3中调用的pyd文件:cv2.cp36-win_amd64.pyd,将之前的cv2.cp36-win_amd64.pyd改名为cv2.pyd,python安装目录下的目录下,只要保留上述两个路径的文件即可保证opencv正常使用,其中的示例其实也可以删除。
坑防:
opencv和opencv_contrib库版本需要保持一致
添加第三方库时候,一定要注意版本是32位还是64位,是否支持Vs版本. 以及库的路径是否正确
安装CMake 尽量安装最新的,避免老版本不能兼容最新库
编译python版本时候,是无Debug模式的
可以先试一试关键的几个工程生成是否能够通过,譬如opencv_core, opencv_cudabgsegm等等,如果出现问题可以节省时间去分析和查找
如果全部编译完毕之后,如果有一两个项目没有编译成功,没必要再全部重新编译,直接在Cmake编译的目录里的modules目录里找到失败的类,进去用VS打开是项目,重新编译一下即可。
如果在python中使用cv2时候,提示缺少dll,lib库,那些因为你编译时候勾选上了BUILD_SHARED_LIBS,但是环境变量没有添加opencv库. 可以编译不需要opencv动态库,在编译时候BUILD_SHARED_LIBS选项去掉,编译成静态库,直接拷贝cv2.pyd到python安装目录下的目录下.
BUILD_opencv_world: 将.lib或者.dll文件统一整合进一个world文件中,方便使用(这里容易导致后续编译出错)
有时候,明明配置对的,但是总是不成功,那么你可以试下.如果不幸中招了,点击CMake左上角的File->Delete Cache,就会把之前选择的清除掉再重新选择,还是不行就直接删除编译输出文件夹.
源码修改编译,直接找到你需要修改的模块进行修改,比如:修改opencv_highgui代码后,右键opencv_highgui项目->生成,把bin->Debug文件夹下的opencv_highgui2413d.dll替换掉之前OpenCV程序中的opencv_highgui2413d.dll文件。新建一个工程,测试一下imshow函数的效果
有时候因为墙的原因,下载/3rdparty文件时候,会无法下载,那么可以手动进入文件下找到xxx.cmake,找到下载链接,到浏览器自己下载.
肯定有没有提到的坑,有幸遇到了怎么办?可以带相应库的Issues下面找答案,或者去https://stackoverflow.com/
后续补充...
领取专属 10元无门槛券
私享最新 技术干货