win10平台使用CMake编译opencv

环境介绍

  在win10的环境下使用CMake和MinGW联合编译opencv和opencv-contrib,因为过程中需要依赖python2、numpy并下载一些配置文件,所以需要用到科学上网工具。

  • 操作系统:windows10专业版(1909)
  • CMake版本:3.21.0-rc1
  • MinGW版本:8.0.1
  • Pyhton版本:2.7
  • OpenCV:3.4.7
  • OpenCV-contrib:3.4.7
  • 科学上网

软件安装

CMake安装

  根据个人习惯,我喜欢使用离线版的压缩包,解压添加环境变量即可使用,能够很方便的放置再自己想要放置的位置上。CMake下载地址:Download

  如果使用的是离线版本的压缩包,解压到自己想要放置的文件夹中,然后添加环境变量。

MinGW安装

  同样的,我也喜欢使用离线版的压缩包,解压添加环境变量即可使用。MinGW下载地址:MinGW

  选择x86-64-posix-seh版本下载,解压后添加环境变量。

python2及numpy的安装

安装python2

  下载安装python2.7.18,运行安装程序即可,安装时请勾选pipAdd python.exe to Path选项。Python下载地址:Python

安装numpy

  首先需要下载numpy的安装文件,选择对应的python2版本的安装文件下载即可。numpy下载地址:numpy

  下载完成后放置在python27中的Scripts文件夹下,然后使用命令行工具在此文件夹中执行pip install numpy-1.16.6+mkl-cp27-cp27m-win_amd64.whl命令即可完成安装。

配置环境变量

  对于环境变量需要注意以下几点:
  1.检查是否添加了CMake的环境变量。
  2.检查是否添加了MinGW的环境变量。
  3.检查是否添加了Python2的环境变量,如果同时包含Python3的环境变量,则需要将Python2的环境变量放置再Python3之前。
  4.暂时删除一些可能造成干扰的环境变量,比如Anaconda之类的包含了同名的可执行文件或者运行库的环境变量。(注意截图备份一下环境变量)

源码下载

  这里给出OpenCV和OpenCV-contrib的官方仓库地址,如果clone或者下载速度比较慢,建议将仓库转存到coding或者gitee等国内的托管平台上,然后从国内平台上下载。
  OpenCV仓库地址:https://github.com/opencv/opencv.git
  OpenCV-contrib仓库地址:https://github.com/opencv/opencv_contrib.git
  选择相应的版本进行下载,我这里选择的是3.4.7版本。

使用CMake工具编译

  此过程中请保证科学上网。
  【关于3.4.7make过程中报错chmod不是可执行命令的解决方案】
  由于3.4.7版本的cmake文件中存在一些bug,导致在windows平台上使用了Linux平台上的chmod命令,因此在make过程中会报错,这里提前修复一下这个问题。原解决方案参见解决方案
  在opencv3.4.7/cmake/OpenCVCHSupport.cmake文件中的307行附近进行修改,修改内容如下图所示(绿色为添加的内容,红色为删除的内容):

Configure

  • 打开CMake的GUI界面
      在下载好的CMake工具的bin目录下打开cmake-gui.exe,以运行CMake的GUI界面。
  • 选择CMake的相关参数
      在打开的GUI界面中选择源码路径和编译后的文件存放路径(下文简称build路径),然后点击Configure按钮并选择MinGW Makefiles类型及默认编译器。点击Finish等待CMake的自动检索配置。
  • 解决报错
      1.手动下载缺失的配置文件
      打开build路径中的CMakeDownloadLog.txt文件,根据提示将相应的文件通过浏览器下载到对应的文件夹中(如果文件夹路径不存在则需要手动创建)。

      2.配置相应的参数
      添加opencv-contrib的路径,在搜索框中搜索PATH然后添加opencv-contrib中的modules路径到扩展模块路径参数上。

      勾选NONFREE选项

      去掉不必要的编译选项,比如java和python版本的库、文档DOC和示例EXAMPLES。

      去掉SETUPVARS选项。
  • 再次点击Configure
      此时由于加入了扩展模块,因此还会出现配置文件下载失败的情况,按照之前的方法查看Log文件,手动下载到对应的文件夹即可。
      可以发现,之前的三个报错的文件都显示校验成功,如果失败请查看是否文件路径或者文件命名出错。

      解决了这些文件报错之后,再点击Configure就可以无报错顺利完成。

Generate

  点击Generate按钮产生相应的Makefile文件。

make

  在build文件夹下使用命令行工具执行mingw32-make命令,其中-j8参数表示使用8线程加速编译,可以根据自己机器的配置调整此参数,如果不添加则默认单线程编译。

mingw32-make -j8


  等待进度条完成编译,耗时跟机器配置有关,请耐心等待。

install

  在build文件夹下使用命令行工具执行mingw32-make install命令将生成的文件进行归档,并存放在install文件夹中。

  可以在build目录中看到install文件夹及其中生成的文件,包含了include中的头文件,x64/mingw/bin中的动态库文件,可自行复制到需要的地方以供使用,动态库路径可以添加到环境变量中以保证可以正常加载。