从源码编译(使用MinGW)
从源码编译一般是为了定制一些安装选项,比如想要获取samples、希望交叉编译安装cuda、需要安装contrib模块。此教程是通过MinGW+CMake完成opencv的编译。因此你需要安装CMake:Download | CMake 和MinGW(MinGW建议通过Msys2安装,直接去Msys2的官网跟着教程走就能完成安装:MSYS2,注意把mingw的路径添加到系统环境变量)
注意若安装opencv4.5以上的版本,建议升级gcc的版本到最新版。
-
以最新版的opencv为例(4.5.5),首先从OpenCV官方的仓库中下载你想要安装的版本的opencv源代码:GitHub - opencv/opencv: Open Source Computer Vision Library。左上角的branch处可以选择安装的版本(通过切换tag)。若你希望安装contrib包,同样在opencv的仓库里:GitHub - opencv/opencv_contrib: Repository for OpenCV's extra modules 。特别注意,contrib的版本需要和opencv版本一致。
-
下载好之后,将两个压缩包都解压到同一个目录下,进入opencv的文件夹,新建一个build文件夹。此时打开CMake,选择源代码路径(where is the source code)为opencv文件夹,生成二进制文件路径(where to build the binaries)为build文件夹,点击开始编译(configure),选择makefile系统为MinGW。
-
编译过程中需要下载一些文件和依赖,如果有梯子就先挂着然后再开始configure,如果没有,最常见的错误就是有些文件可能下载不下来,一般是ffmpeg的动态链接库和ade。这就需要我们去github对应的页面上下载这些文件,并进行替换(可能同时还需要修改哈希校验码使得我们的文件和原本要下载的校验码一致)。笔者在这里已经为你准备好了常见的无法下载的链接库和包,戳这里:百度网盘 请输入提取码 , 提取码:ttd7。
-
第一遍cmake完成后,发现上面一栏有很多东西变红了,这并不是报错,而是说明有选项发生变化。在这里可以选择自定义编译选项,作为初学者,我们要修改的有这几项:
-
build type
填入Release会编译发行版本的opencv包,从而去除debug信息和符号表,这可以提高性能;填入Debug则会编译debug版本的opencv(这是给需要深度开发opencv修改源码的人用的),而一般我们不需要深入opencv的源代码进行debug。
-
pkg-config
这会生成一个pkg-config的路径使得pkgconfig能够自动传递库路径给g++进行编译。
-
build_opencv_world
这一选项会使得生成的链接库为一个包而不是多个。
-
extra_module
如果你不需要附加模组,不需要填写此项!此项填入的是contrib包中的附加模组的路径,即刚刚下载的opencv_contrib-x.x.x(x为你下载的版本)。注意在选择的时候一定要点击进入modules文件夹而不是单击他:
正确范例,双击进入modules文件夹后再点击选择文件夹
配置完以上四项后,再次configure,如果刚才有文件无法下载估计这次还是会有无法下载的东西,一般是boostdesc、vgg、facelandmark、wechatqrcode等。用前述同样的方法即可(笔者这里准备好了常见的无法下载的链接库和包,戳这里:百度网盘 请输入提取码 , 提取码:ttd7)
如果你希望自定义更多选项,可以参考此官方链接:config reference
确认无红色报错之后点击generate。
cmake配置完成
成功生成makefile
-
-
现在开始编译,在build文件夹中打开cmd或者终端或者其他类shell工具,输入:
mingw32-make # 可以加上参数 -jx,其中x为线程数,根据你电脑的配置来选,一般为cpu核心数的两倍 # 务必确保已经把mingw的bin文件夹加入PATH环境变量,这样系统才能找到mingw32-make.exe
开始编译
静候5 - 70 mins不等(电脑配置不同)。编译完成后,输入:
mingw32-make install
开始安装库,很快就好。
成功安装动态库到对应路径(若没有修改则是默认路径)。
-
还需要添加opencv的库路径和路径到系统的环境变量中的PATH
win+S打开搜索界面,输入“编辑系统环境变量 ”:
打开以后,点击环境变量:
1.首先,点击新建,创建一个新的环境变量:
变量名为OpenCV_DIR,路径为刚刚我们编译opencv时新建的build下的install:
可以看到,这个路径下有两个cmake文件,让cmake在构建makefile的时候可以确定opencv的版本和头文件等的位置。
2.再双击PATH,在PATH中新增一条:
可以看到,因为我们在cmake构建的时候选择了opencv_world的选项,因此最后只会生成一个动态链接库libopencv_world455.dll。这里还有一些第三方库(3rdparty中的内容),和一些其他必须的可执行程序。
-
最后测试安装是否成功
cmake正确生成了Makefile并编译成功,正确运行。