OpenCV contrib编译及问题解决

OpenCV是一个开源发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。OpenCV中包括很多类型的算法包,还有第三方及专利算法。在实际工程中,经常需要根据特性定制库,这就需要自行编译OpenCV库。本文记录了编译OpenCV主体库 +contrib第三方库的过程,希望能让大家少走弯路。

本机环境:

windows10(x64)

visual studio 2019

cmake 3.19.2


一、准备工作

a.下载相同版本源代码

直接从github下载代码很慢,而且容易失败,因而采用了本人《解决github下载缓慢的稳定途径》中的方法。

opencv源码:https://github.com/opencv

OpenCV contrib编译及问题解决_第1张图片

 

注意:编译opencv-contirb,实际是将opencv与opencv_contrib两个仓库中的代码编译为一体使用。需要根据《解决github下载缓慢的稳定途径》中的方法,把这两个仓库同步到gitee.com,然后从gitee.com下载。

最近一个项目环境需要的是3.x的库,所以就选择编译3.4的opencv及对应版本的contrib

!!!一定是相同版本

OpenCV contrib编译及问题解决_第2张图片

gitee中选择opencv3.4分支下载

OpenCV contrib编译及问题解决_第3张图片

gitee中选择contrib3.4分支下载

解压两个下载的源码,放到 D:\opencv34 下,目录结构:

OpenCV contrib编译及问题解决_第4张图片

 

output 用来存储cmake生成的文件。

b.变通方式解决文件下载问题

cmake配置编译中的一个大坑是下载文件失败。因为cmake编译中,是从国外网站下载文件,很难成功。通过一些变通的方式,解决问题。

  • 修改hosts文件

C:\Windows\System32\drivers\etc\hosts,是计算机解析互联网地址时,第一个参照的资源。如果把ip与域名的对照写在此文件,计算机访问互联网时,可以直接访问域名对应ip。

OpenCV contrib编译及问题解决_第5张图片

 

配置中 cmake是从raw.githubusercontent.com下载文件,如果不能有效访问此网址,则不能成功。此网站对应的ip是从 https://site.ip138.com 查询获得,至于网上很多地方介绍的 https://www.ipaddress.com 现在已经失效了。

OpenCV contrib编译及问题解决_第6张图片

raw.githubusercontent.com查询结果

raw.githubusercontent.com 在site.ip138.com上查询,返回是一个ip列表,可以从中进行筛选。

下面通过ping ip 的方式,查找反馈时间最短,且稳定的ip地址。

OpenCV contrib编译及问题解决_第7张图片

 

通过以上方式,确定了 151.101.228.133。使用时,最好按照上面方法自行选择一下。

到此,至少应该能成功连接到服务器。

  • 迅雷手工下载cmake下载失败文件

在后面cmake中,下载失败会记录到D:\opencv34\output\CMakeDownloadLog.txt

其中有下载地址,可以复制地址,让迅雷帮助下载。

为方便,稍后会将常下载失败文件放到网盘。具体如何处理参考下文。

#do_copy "boostdesc_bgm.i" 
"0ea90e7a8f3f7876d450e4149c97c74f"
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm.i"
"D:/opencv34/output/downloads/xfeatures2d"
#missing "D:/opencv34/output/downloads/xfeatures2d/boostdesc_bgm.i"

CMakeDownloadLog.txt下载失败记录实例,https://raw.githubusercontent.com/xx这项,即为文件地址。】

c.工作磁盘留出足够空间

编译后,工作目录磁盘占用近8.5G。所以,最好留出2-3倍的磁盘空间。


OpenCV contrib编译及问题解决_第8张图片

 

二、CMake配置项目

配置分3步完成:配置opencv 配置opencv_附加项 生成项目

a.配置opencv

cmake安装最新版即可,点击生成的桌面图标启动。

OpenCV contrib编译及问题解决_第9张图片

opencv解压目录

OpenCV contrib编译及问题解决_第10张图片

 

指定opencv source code位置:D:\opencv34\opencv

编译输出目录:D:\opencv34\output

点击左下角【Configure】

OpenCV contrib编译及问题解决_第11张图片

 

本机的generator for this project: vs2019

optional platform : x64 (因本机为x64) ,其他可选win32 、ARM、ISO

【Finish】,运行一会,底部出现【Configure done】。

!!!出现下载失败,就表示此步骤失败,需要重新操作。

如果底部显示有红色文字,一般是下载失败造成(下载会进行重试,花时间)。【Configure done】后,可以查看CMakeDownloadLog.txt,尝试用迅雷下载。

下载失败文件,CMakeDownloadLog.txt中会有正确放置位置的线索。


失败后处理:

用迅雷下载CMakeDownloadLog.txt中失败文件,参考上文准备工作部分。

通过观察:配置opencv,会在源代码目录下建立.chache目录,cmake自动下载到D:\opencv34\opencv\.cache中,每个项目一个子目录(重新操作时,成功下载的文件,不会被覆盖)。如果下载成功,会解压到D:\opencv34\output\3rdparty下对应目录。因而,只要能保证在对应目录有对应文件,就表示本步骤完成,后续才能成功!

OpenCV contrib编译及问题解决_第12张图片

 

OpenCV contrib编译及问题解决_第13张图片

进入ffmpeg目录

\.cache中文件名为: md5值-文件名 ,通过迅雷下载的文件没有md5值,如ippicv_2020_win_intel64_20191018_general.zip。手工加上md5值:879741a7946b814455eee6c6ffde2984-ippicv_2020_win_intel64_20191018_general.zip。此文件为压缩包,因为不清楚cmake具体如何解压,所以放在\.cache下,让cmake自己处理:

OpenCV contrib编译及问题解决_第14张图片

 

output\3rdparty中,因为迅雷下载的是单个文件,基本清楚放置位置,所以放在此处:

OpenCV contrib编译及问题解决_第15张图片

 

!!!如上处理后,删除output目录中内容,output\3rdparty除外。

重新启动cmake,配置opencv,就可以。(如果红色文字为查找python相关的,如果你不是用于python,可以忽略)


b.配置opencv_附加项

OpenCV contrib编译及问题解决_第16张图片

contrib路径指定

在第一步没有下载文件失败,【Configure done】后,进行附加项配置。

OPENCV_EXTRA_MODULES_PATH , 鼠标选择 D:/opencv34/opencv_contrib/modules

(注意:要选择,不要拷贝,windows下会把路径分隔符为 \,cmake认为是转移符号,报错)

OPENCV_ENABLE_NONFREE 如果要使用需专利授权的算法(如surf),选择此项。

OpenCV contrib编译及问题解决_第17张图片

 

BUILD_opencv_world 编译库为一个opencv_worldxx.dll/lib文件,否则是分成很多文件。一个文件便于管理,多个文件,节约空间、灵活,根据具体使用场景选择。

OpenCV contrib编译及问题解决_第18张图片

 

点击左下角【Configure】,状态信息中显示【Configure done】。

如果状态信息中出现红色下载文件失败的信息,则需要如下操作后,从头重新配置。


失败后处理:

失败文件还是记录在D:\opencv34\output\CMakeDownloadLog.txt 中,用迅雷下载(如果失败,稍后再尝试,国外线路不稳定)。

将下载后的文件,拷贝到 D:\opencv34\opencv_contrib\modules\xfeatures2d\src中。

!!!如上处理后,删除output目录中内容,output\3rdparty除外。

重新进行上面两步配置。此时,即使第二步还有下载失败信息,只要是迅雷已经下载过的,就可以忽略。

OpenCV contrib编译及问题解决_第19张图片

 

此步骤容易失败的文件,基本是这些。稍后会整理到网盘。


c.生成项目

完成上面两步配置后,即可生成项目。点击【左下角】的【Generate】。

OpenCV contrib编译及问题解决_第20张图片

 

OpenCV contrib编译及问题解决_第21张图片

Generate完成


三、编译opencv

OpenCV contrib编译及问题解决_第22张图片

 

在\output目录中,找到CMake生成的项目框架文件OpenCV.sln,双击用Visual Studio打开。

OpenCV contrib编译及问题解决_第23张图片

 

如图,选菜单【生成】--》【批生成】。

OpenCV contrib编译及问题解决_第24张图片

 

如图选择ALL_BUILD Debug/Release x64(根据配置时的选择)

INSTALL Debug/Release x64。

点击【生成】,开始编译opencv库。此过程约用时40分钟。直到出现下面生成:成功信息。

OpenCV contrib编译及问题解决_第25张图片

 

opencv生成的的库,在output\insall目录下。主要关注 include目录及x64目录,会在vc开发中被引用。

OpenCV contrib编译及问题解决_第26张图片

 

稍后会另外写一篇关于visual studio 如何调用此库的文章,可以关注。


本实验下载的代码及下载失败文件整理:

链接:https://pan.baidu.com/s/1p3407qZcANzTLlarCgwsVg

提取码:4xxh

 

你可能感兴趣的:(计算机视觉,opencv,cmake,vc++,计算机视觉)