想使用 OpenCV 的 Tracking 功能,发现居然缺少部分 Include,原来之前直接下载编译好的版本不带 OpenCV Contrib …… 那就自己编译吧

期实训经过快一周了,无人机的交互与视频流的接收已经完成的差不多,在即将开始结合计算机视觉部分实现目标检测与跟踪的时候,发现我们使用的 OpenCV 里不带 Tracking 模块。那咋办嘛。经过查找资料发现原来是部分模块是没有包含在 OpenCV 本体里的,且没有直接编译好的版本,需要自己从头编译 OpenCV 时添加附加模块一起编译,才能使用。

简而言之,OpenCV 需要同 OpenCV Contrib 一起使用源码进行编译,才能使用部分模块功能。这里我们使用的 CMake 作为编译工具。

已经编译好的文件下载

这里提供一个 Windows10 x64 版本的已经编译好的 OpenCV 4.1.0 + OpenCV Contrib 4.1.0 文件:

点此下载

还是建议自己编译,这个版本不保证在其他硬件系统以及软件环境下依然可用,且采用默认编译选项,仅勾选了 BUILD_opencv_world 以及添加 OpenCV Contrib模块。

环境搭建部分见上篇博文,下面正式开始编译。

下载源码并编译

下载源码

OpenCV 源码下载地址:https://github.com/opencv/opencv/releases

OpenCV Contrib 源码下载地址:https://github.com/opencv/opencv_contrib/releases

选择 Source Code 下载,如图所示:

Alt

OpenCV Contrib 与上图类似。下载之后解压到任意文件夹,注意不要有中文路径

编译

Cmake的下载安装略。

打开 CMake-GUI,这里我使用的是 3.14.0 版本。

添加 OpenCV 源码路径并设置 Build 输出路径,如下图所示:

Alt

点击左下角的 Configure,弹出的对话框中选择项目生成器以及生成器平台,这里我生成的是用于 VS 2017 的 x64 平台的版本,选择之后点击 Finish,如下图所示:

Alt

等待一段时间,就可以看到具体的生成参数。这里大部分按照默认的勾选就完事了,不过有两点需要注意

1.BUILD_opencv_world 一半需要勾选,勾选之后就会生成 opencv_world410.dll 以及 opencv_world410d.dll 以及对应的 lib 文件之后只需要导入这几个文件即可,否则会生成一大堆 .dll 与 .lib 文件,好处是可以根据需要导入具体的文件,不过为了省事的话还是勾选这个选项吧。

2.使用 Search 找到 OPENCV_EXTRA_MODULES_PATH,并设置为你的 OpenCV Contrib 文件夹中的 modules 文件夹路径,这样就可以将 OpenCV Contrib 一同编译了。如下图所示:

Alt

根据需要勾选或者取消其他选项,如需要编译支持 Cuda 的 OpenCV 版本的话,勾选 WITH_CUDA 即可。确认无误之后再次点击 Configure,会开始分析并下载编译所需的依赖,等待一段时间之后,若还存在红色的选项,则继续点击 Configure,直到全部选项变为白色为止,如下图所示:

Alt

之后点击 Generate,会在你设置的输出路径之下构建一个 VS 项目(或者其他类型项目,根据你选择的生成器)。

找到并打开其中的 OpenCV.sln,点击 生成 - 批生成,勾选其中的 ALL_BUILD 以及 INSTALL,点击生成即可开始编译 OpenCV,如下图所示:

Alt

编译时间较长,以我的 Inter(R) Core(TM) i7-6700HQ CPU @ 2.60GHz 为例,大约以 100% 的使用率编译了将近一个小时才完成。

经过漫长的等待,编译成功之后可以在你设置的 Build 文件夹下找到 Install 文件夹,其中的内容和直接下载官方编译好的版本解压出来的一致,编译过程到此结束,具体的环境搭建见上一篇博文。