OpenCV 4 + contrib 编译 with CMake windows

1.源码下载

OpenCV:https://github.com/opencv/opencv

contrib:https://github.com/opencv/opencv_contrib

注意本体和contrib的版本匹配,详见以下:

OpenCV 4 + contrib 编译 with CMake windows

 

 

 默认的是“master”分支,我们需要点击“Branch:master”按钮,点击“Tags”标签,在下拉列表中选择想要的版本。本文以4.1.0为例。

本体和扩展模块选择同样的分支:

OpenCV 4 + contrib 编译 with CMake windows    OpenCV 4 + contrib 编译 with CMake windows 

 

 选择“Download ZIP”下载到本地

OpenCV 4 + contrib 编译 with CMake windows

 

 

 

2.CMake首次设置

CMake下载地址:https://cmake.org/download/

1)打开CMake,设置好OpenCV本体源码所在路径,以及存放生成的工程的目标路径

OpenCV 4 + contrib 编译 with CMake windows

 

 

正确的源码路径如下图,包含一个CMakeList.txt文件,根据自己存放的位置进行设置。

 

OpenCV 4 + contrib 编译 with CMake windows

 

 注意:

路径中不能有中文

确保目标路径的硬盘剩余空间在18G以上

 

2)点击“Configure”

OpenCV 4 + contrib 编译 with CMake windows

 

 

3)选择编译器:

OpenCV 4 + contrib 编译 with CMake windows

 

 

当前版本不支持用vs 2019编译,选择2017。

 

4)在第二栏选择编译器架构,这里选择64位(x64)。要根据自己硬件架构进行选择:32位兼容性好(win32),64位速度快,arm架构的硬件要选择arm。

(注:老版本的CMake在上一步就会选择编译器架构)

OpenCV 4 + contrib 编译 with CMake windows

 

 

5)点击“完成”进行第一次编译。这次编译可能会报错,但不用去管。我们会发现出现了很多红色背景的选项。

 

3.在CMake中进行contrib扩展模块等的详细设置

1)找到“OPENCV_EXTRA_MODULES_PATH”。(可在“Search”栏中直接搜索)

OpenCV 4 + contrib 编译 with CMake windows

 

 点击右侧的省略号选择下载的contrib源码中,“modules”文件夹的路径(注意不是contrib的主目录)。

该路径是下面这样的:

OpenCV 4 + contrib 编译 with CMake windows

 

 

2)可选项:

a.如果需要使用surf特征检测之类的有专利的算法,需要勾选"OPENCV_ENABLE_NONFREE”:

 OpenCV 4 + contrib 编译 with CMake windows

 

 

 b.可勾选“BUILD_opencvv_world”,这样最后的库是一个文件,引用更简便。

 

c.根据自身python版本和需要选择性勾选“BUILD_opencv_python2”,“BUILD_opencv_python3”

 

3)再次点击“Configure”。这次确保不会有红色的报错。

 

4.Download failed错误处理

最常见的错误应当是“Download failed”。这要归功于the wall。于是需要用一定手段手动下载。我们可以用以下方法获取到下载地址。

以ffmpeg下载失败为例:

报错信息形如下图,我们看到“Download failed”字样,确认是下载失败。

在报错信息上方我们可以找到下载失败的文件名opencv_ffmpeg.dll。

在下方Call Stack中可以找到ffmpeg库的.cmake文件路径:

OpenCV 4 + contrib 编译 with CMake windows

 

 

 用notepad或记事本打开ffmpeg.cmake,找到如下字段:

OpenCV 4 + contrib 编译 with CMake windows

 

我们可以看到下载的URL: https://raw.githubusercontent.com/opencv/opencv_3rdparty/${FFMPEG_BINARIES_COMMIT}/ffmpeg/

其中 ${FFMPEG_BINARIES_COMMIT} 字段的内容可以在前面的代码中找到:

OpenCV 4 + contrib 编译 with CMake windows

 

 

于是我们得到了下载的base url:  https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/

我们再看这段代码,它在一个foreach循环中:OpenCV 4 + contrib 编译 with CMake windows

 

通过之前的代码我们可以看到ids的元素,是BIN32,BIN64,CMAKE,并且紧接着定义了name_BIN32, name_BIN64, name_CMAKE

 OpenCV 4 + contrib 编译 with CMake windows

 

再看循环体中的代码OpenCV 4 + contrib 编译 with CMake windows

 

 

我们可以明白它是分别下载了这三个文件: OpenCV 4 + contrib 编译 with CMake windows

于是我们将他们分别和之前得到的base url拼接成了三个下载地址:

OpenCV 4 + contrib 编译 with CMake windows

 

 分别粘贴到浏览器中下载到自定文件夹。(其中的cmake文件可能不会自动下载,需要在页面中右键点“另存为”)

OpenCV 4 + contrib 编译 with CMake windows

 

 

 回到刚才那个cmake文件,我们将网址那行代码注释掉,替换成刚刚存放下载文件的目录:

OpenCV 4 + contrib 编译 with CMake windows

 

 

 

保存后,再次点击“Configure”。可以看到ffmpeg不再报错:

 OpenCV 4 + contrib 编译 with CMake windows

 

 其他库下载失败的问题可以用同样的方法解决。

 

5. 编译生成

第二次“Configure”成功后,点击“Generate”,然后用对应版本的vs打开生成的工程。

OpenCV 4 + contrib 编译 with CMake windows

 

 

然后在vs中选择Build(生成)->Batch Build(批生成)。

在弹出的窗口中勾选ALL_BUILD和INSTALL两个项目的Debug和Release版,点击Build(生成)。

 

 OpenCV 4 + contrib 编译 with CMake windows

 

 OpenCV 4 + contrib 编译 with CMake windows

 

 

大约半小时后,编译完成:

OpenCV 4 + contrib 编译 with CMake windows

 

 

编译结果在install文件夹中:

OpenCV 4 + contrib 编译 with CMake windows

 

 include装着头文件,x64包含64位库。OpenCV源码编译完成。

 

 

 

 

 

 

 

 

 

 

 

 

OpenCV 4 + contrib 编译 with CMake windows

上一篇:ocr api 识别表格 图片


下一篇:将nginx安装为windows服务