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,运行安装程序即可,安装时请勾选pip
和Add 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
中的动态库文件,可自行复制到需要的地方以供使用,动态库路径可以添加到环境变量中以保证可以正常加载。
Comments | 3 条评论
博客作者 不找到好工作不改网名
也可以试试Cygwin的gcc,g++好用
博客作者 不找到好工作不改网名
为什么需要Python2
博客作者 songjiahao
@不找到好工作不改网名 是opencv3.4.7这个版本的要求,这个根opencv版本有关