【VS2019+OpenCV4.5.1+OpenCV_contrib4.5.1安装+配置保姆式教程】_opencv contrib-程序员宅基地

技术标签: cmake  opencv  


前言

背景:初入OpenCV的世界,没人指导没人教,我一开始就直接下了OpenCV4.5.1(当时还没了解3和4的区别,只知道技术的东西肯定新有新的优势,虽然也会伴随着更多的未知,但还是毅然下了4),配合着原本装好的VS2019使用。这几天需要用到SIFT特征点检测的一些函数需要contrib拓展包的一些头文件,故在已经装好VS2019+OpenCV4.5.1的基础上,继续安装OpenCV_contrib4.5.1拓展包,因为4.5.1版本又是最新的,所以很多东西都是自己实践亲测出来的,真就每次装个东西,各位前辈们碰到的问题都全部集中在我身上,这就是all in吗?爱了爱了。
时长:历时3天(当然不是完完全全的72小时,但至少每天10+小时堆在这上面)。
吐槽:我看到有些帖子写:VS2015、VS2019装OpenCV_contrib不稳定,最后重装VS2017才成功安装和配置contrib拓展包。拜托,都什么时代了,还信这些,我就一愣头青的,非就用着最新的版本照样安装成功,时代在进步,当然我们也要努力突破啊(小白内心独白自述,dalao们当笑话看看就好哈哈哈哈)。


一、搭建环境

操作系统:Windows 10
软件:Visual Studio 2019、OpenCV4.5.1、OpenCV_contrib4.5.1拓展包、Cmake3.19.3.

注释:OpenCV和contrib拓展包的版本一定要一致!!!上述各安装包有很多博主前辈都有教在哪里找,也有教怎么安装,我就不赘述了。
比较难找的就只有contrib4.5.1拓展包,实在找不到的话可以去我发布的资源上下载,找资源不易,请多多包涵。

二、OpenCV_contrib4.5.1安装步骤(正文来了,敲黑板!)

1.OpenCV_contrib拓展包编译

在这里插入图片描述

第一栏Where is the source code是指OpenCV4.5.1解压后得到的source文件的路径;
第二栏where to build the binaries是指编译后输出文件的路径,我是直接在opencv的同个大文件夹下创了一个名为“contrib_new”的文件夹,此点看个人喜好和此时心情。

这两个路径设置好之后就可以点击【Configure】按钮,选择将源码编译成与VS版本相应的工程文件,如下图所示。
在这里插入图片描述
第一栏:对应的VS版本;
第二栏:编译后工程文件适用的操作平台版本,我电脑是64位的,所以我选择的是编译成是64位的OpenCV_contrib工程文件;
第三栏:跳过;
选项:选择本地编译器“Use default native compilers”;
最后Finish走起,几分钟后即可完成编译。
:编译前,请打开你的vpn!而且编译对网络要求很高,如果网线不行,请开手机热点,换着试。
有些东西就是玄学,我以前刚玩ROS的时候各位大神也是这么教的。
在这里插入图片描述

如果你足够幸运,只有上面那一栏报错,下栏毫无红色字体错误,那恭喜你,直接按我的文字配置上栏的即可。然而大部分人可能会像我一样,并不是那么幸运,结果就是这样,上下都红:

在这里插入图片描述

行吧,我们先一栏一栏来解决问题(ps:即使上下栏都有错误,都需要按如下步骤操作;仅有上栏错误的只需要按“上栏操作”进行):
上栏操作:在上栏界面中的变量中找到“BUILD_opencv_world”和“OPENCV_ENABLE_NONFREE”两个变量,在变量后面的方框中勾选,即打上“√”(含义可自行百度,但没必要)。随后,找到“OPENCV_EXTRA_MODULES_PATH”变量,在此变量后面加上【opencv_contrib4.5.1】文件夹里的【modules文件夹】的路径。最后再次点击【Configure】,直到上栏所有的红色变量变成白色(来来来,保姆上图!)。
在这里插入图片描述
在这里插入图片描述

下栏操作:首先,我们按照下栏找到编译日志的路径,点开CMakeDownloadLog.txt,看你所缺失的文件,也就是下载失败的文件,你按着路径进去看,会看到你需要下载的那几个文件目前在文件夹里的都是0k,即失效文件,我们要做的就是手动下载正确的文件来替换掉他们。
来了来了,又敲重点了,我第一次打开这个时有一共缺了14个文件,好家伙,我是重新编译了好几次后才变得这么少的,为什么又编译了好几次呢,这就是我走过的坑了,希望大家看完不要再走我的老路,节约时间,献身科研
在这里插入图片描述

正文开始CMakeDownloadLog.txt文件打开后可能很多人不知道怎么看,我拿一个缺失文件的描述来举例解释一下吧。

#do_copy "boostdesc_bgm.i" "0ea90e7a8f3f7876d450e4149c97c74f" 
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm.i" 
"D:/OpenCV/opencv/contrib_new/downloads/xfeatures2d"
#missing "D:/OpenCV/opencv/contrib_new/downloads/xfeatures2d/boostdesc_bgm.i"
#check_md5 "D:/OpenCV/opencv/sources/.cache/xfeatures2d/boostdesc/0ea90e7a8f3f7876d450e4149c97c74f-boostdesc_bgm.i"
#copy "D:/OpenCV/opencv/contrib_new/downloads/xfeatures2d/boostdesc_bgm.i" "D:/OpenCV/opencv/sources/.cache/xfeatures2d/boostdesc/0ea90e7a8f3f7876d450e4149c97c74f-boostdesc_bgm.i"

你的缺失文件是:boostdesc_bgm.i,其MD5值是:0ea90e7a8f3f7876d450e4149c97c74f,你需要做的是把这个文件下载回来,并改成相应的文件名放到指定的文件路径下。
下载的网址是:https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm.i
下载后文件要改成的名字是:MD5值+“-”+文件名,即例子中最后一行的:0ea90e7a8f3f7876d450e4149c97c74f-boostdesc_bgm.i
存放文件的路径是:D:/OpenCV/opencv/sources/.cache/xfeatures2d/boostdesc

按着这个方法,去下载所缺失的文件,并放到相应的路径替换掉他们。
上面这个只是例子,不是MD5值全部一模一样按着这个改,是教你怎么看!!!

注意(请认真看,这也是为什么编译了好几次的原因):

  1. 下载这些文件时,请打开你的VPN!打开你的VPN!打开你的VPN!如果打开了vpn还是打不开网页,请你换个vpn的服务器或者换个时间段,或者换个网络再打开这个网页(不要质疑我,我就是第一次打打不开,疯狂质疑各位dalao让我在浏览器打开这些网址的做法,走了很多弯路)。
  2. 后缀为.cmake.i的文件在浏览器中打开会显示出源码,请直接在网页上找到另存为的选项,将这些文件直接保存成对应的文件格式,不然使用不了。即,不要将代码复制下来,保存在新建的.txt文件中,再改名,这样没用!没用!没用!
  3. 全部替换完后,记得打开VPN,再回到CMake中,点击【Configure】。

如果实在搞不定这些文件,也可以在我过两天整理后上传的资源中下载,寻找和整理不易,勿喷(如果你搞得定,你也不会找资源了哈哈哈哈哈,我就是那个没钱下载只能疯狂自己探索的人哈哈哈哈哈哈哈)。

待下栏中出现Configuring done,且上下两栏都没有红色的错误文字提示时,恭喜你,你度过了最艰难的一步了。随后即可点击【Generate】,等待下栏出现Generating done,就基本完成了对OpenCV_contrib拓展包的编译,编译完之后文件夹会变得很大,小事情,不要慌,很大才说明编译成功了,很小的话说明有问题(此处无图,因为太激动了,没保存)。


我当初缺失的文件:
在这里插入图片描述
我一开始一共缺了16个,所以不要放弃,加油吧。
注:如果找不到可以到我发布的资源下载,鼓励自己找。

2.Visual Studio2019编译

进入刚刚编译好的.sln文件,可以从【Generate】后CMake界面进入,点击Generate旁边的【Open Project】直接进入,也可以从刚刚你创建用于存放编译项目工程文件的文件夹中找到.sln文件直接进入。
在这里插入图片描述
进入VS界面后,选择生成->批生成,勾选如下四个项目,点击【生成】。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

生成的时间会比较长,如果你上述所有步骤都没错的话,生成后的结果会是全都成功,有些步骤可能在CMake中【Configure】和
【Generate】都通过并没有警告字样,但有错误的话,在VS2019中生成是会有错误的(注:生成的数量因人而异)。

生成的数量因人而异

3.环境配置

注:以下添加文件的路径都是你刚刚自己创建用于存放编译项目工程文件的文件夹里文件,我的是在D:\OpenCV\opencv\contrib_new,“contrib_new”是我创建用于存放编译项目工程文件的文件夹
。环境配置的过程与配置OpenCV的过程很像。

3.1 系统环境配置

在“此电脑”-“属性”-“高级系统设置”-“高级”-“环境变量”-“系统变量”-“Path”,添加“...\install\x64\vc14\bin”,我的是D:\OpenCV\opencv\contrib_new\install\x64\vc16\bin。然后重启VS。
(注:我看有些博主是选择改“用户变量”,这个我是直接把整个系统变量的PATH配置了,一劳永逸。)

在这里插入图片描述

3.2 Visual Studio项目环境配置

在VS中新建一个空项目,进入后,右击,打开该项目的【属性】。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

① 在该属性页中,将“配置”和“平台”分别改为“所有配置”和“所有平台”;
② 在“VC++目录”中:
③ 在包含目录中加入:

...\install\include
...\install\include\opencv2

我自己的路径是:
D:\OpenCV\opencv\contrib_new\install\include D:\OpenCV\opencv\contrib_new\install\include\opencv2

在这里插入图片描述

④ 在库目录中加入:

...\install\x64\vc16\lib

我的路径是:
D:\OpenCV\opencv\contrib_new\install\x64\vc16\lib

在这里插入图片描述
⑤ 将“配置”改成“Debug”模式;
⑥ 选择“链接器”-“输入”
⑦ 在“附加依赖性”中加入:

opencv_world451d.lib

在这里插入图片描述

在这里插入图片描述
⑧ 同理,配置“Release”模式,在“附加依赖性”中加入:

opencv_world451.lib

在这里插入图片描述

在这里插入图片描述
注:可能很多博主在附加依赖项这一步的时候加了很多依赖,实际上我加了很多依赖后反而用不了,不加更能够使用。

附一堆附加依赖项
Debug模式:

opencv_aruco451d.lib
opencv_bgsegm451d.lib
opencv_bioinspired451d.lib
opencv_calib3d451d.lib
opencv_ccalib451d.lib
opencv_core451d.lib
opencv_datasets451d.lib
opencv_dnn451d.lib
opencv_dnn_objdetect451d.lib
opencv_dpm451d.lib
opencv_face451d.lib
opencv_features2d451d.lib
opencv_flann451d.lib
opencv_fuzzy451d.lib
opencv_gapi451d.lib
opencv_hfs451d.lib
opencv_highgui451d.lib
opencv_imgcodecs451d.lib
opencv_imgproc451d.lib
opencv_img_hash451d.lib
opencv_line_descriptor451d.lib
opencv_ml451d.lib
opencv_objdetect451d.lib
opencv_optflow451d.lib
opencv_phase_unwrapping451d.lib
opencv_photo451d.lib
opencv_plot451d.lib
opencv_quality451d.lib
opencv_reg451d.lib
opencv_rgbd451d.lib
opencv_saliency451d.lib
opencv_shape451d.lib
opencv_stereo451d.lib
opencv_stitching451d.lib
opencv_structured_light451d.lib
opencv_superres451d.lib
opencv_surface_matching451d.lib
opencv_text451d.lib
opencv_tracking451d.lib
opencv_video451d.lib
opencv_videoio451d.lib
opencv_videostab451d.lib
opencv_xfeatures2d451d.lib
opencv_ximgproc451d.lib
opencv_xobjdetect451d.lib
opencv_xphoto451d.lib

Release模式:

opencv_aruco451.lib
opencv_bgsegm451.lib
opencv_bioinspired451.lib
opencv_calib3d451.lib
opencv_ccalib451.lib
opencv_core451.lib
opencv_datasets451.lib
opencv_dnn451.lib
opencv_dnn_objdetect451.lib
opencv_dpm451.lib
opencv_face451.lib
opencv_features2d451.lib
opencv_flann451.lib
opencv_fuzzy451.lib
opencv_gapi451.lib
opencv_hfs451.lib
opencv_highgui451.lib
opencv_imgcodecs451.lib
opencv_imgproc451.lib
opencv_img_hash451.lib
opencv_line_descriptor451.lib
opencv_ml451.lib
opencv_objdetect451.lib
opencv_optflow451.lib
opencv_phase_unwrapping451.lib
opencv_photo451.lib
opencv_plot451.lib
opencv_quality451.lib
opencv_reg451.lib
opencv_rgbd451.lib
opencv_saliency451.lib
opencv_shape451.lib
opencv_stereo451.lib
opencv_stitching451.lib
opencv_structured_light451.lib
opencv_superres451.lib
opencv_surface_matching451.lib
opencv_text451.lib
opencv_tracking451.lib
opencv_video451.lib
opencv_videoio451.lib
opencv_videostab451.lib
opencv_xfeatures2d451.lib
opencv_ximgproc451.lib
opencv_xobjdetect451.lib
opencv_xphoto451.lib

3.3 测试

测试代码什么的我是不会给的了,自己写!
其实哪里需要测试什么,你在编程的时候试一试能不能找到xfeature2d.hpp头文件即可,如果配置失败,你这个头文件编译器是找不到的,如图即成功。
在这里插入图片描述
如果你加入了一堆附加依赖项后,反而最后生成解决方案找不到.hpp文件时,你不妨删掉试试?版本越高或许并不需要那么多花里胡哨的东西。

这是我调用SIFT测试的图(嗯,原图我也是偷来的,应该是安装OpenCV时偷哪位博主的,忘了哈哈哈哈哈):
在这里插入图片描述

祝君成功,献身科研!!!


三、Reference

https://blog.csdn.net/GIS_feifei/article/details/102531891
https://blog.csdn.net/weijifen000/article/details/93377143
https://blog.csdn.net/weixin_42331201/article/details/111560667
《OpenCV4 快速入门》人民邮电出版社出版

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_46135347/article/details/114190250

智能推荐

使用 IMQ+HTB+iptable 统一流量控制心得_imqhiot-程序员宅基地

文章浏览阅读904次。IMQ 是中介队列设备的简称,是一个虚拟的网卡设备,与物理网卡不同的是,通过它可以进行全局的流量整形,不需要一个网卡一个网卡地限速。这对有多个ISP接入的情况特别方便。配合 Iptables,可以非常方便地进行上传和下载限速。一、网络环境简介目的站点 (Internet) IP: 218.x.x.x (用 TARGET_IP 表示)路由器 (Router) eth1_imqhiot

C++将UTF-8编码的文件转化为GB2312编码_c++ utf-8转gb2312-程序员宅基地

文章浏览阅读1.9k次。C++将UTF-8编码的文件转化为GB2312编码我需要对一个html网页进行解析,html是使用UTF-8编码的。但是,我使用的visual Studio 19是使用gb2312进行编码的。当读入html文件并在控制台上输出时,中文自然全部变成了乱码所以,需要通过某些操作,对读入的字符串进行转化,将UTF-8编码转为GB2312编码在网上看了很多文章,都没有解决问题,或者过于复..._c++ utf-8转gb2312

信安软考 第十四章 恶意代码防范技术原理_第14章恶意代码防范技术原理-程序员宅基地

文章浏览阅读2k次,点赞2次,收藏9次。恶意代码(Malicious code),是一种违背目标系统安全策略的程序代码,会造成目标系统信息泄露、资源滥用,破坏系统的完整性及可用性。它能够经过存储介质或网络进行传播,从一台计算机系统传到另一外一台计算机系统,未经授权认证访问或破坏计算机系统。通常许多人认为“病毒”代表了所有感染计算机并造成破坏的程序,但实际上,换成“恶意代码”更为贴切,病毒只是恶意代码的一种。恶意代码的种类包括。_第14章恶意代码防范技术原理

【IoT】产品设计:硬件成本核算,这篇文章就够了_硬件产品的成本能算得出来吗-程序员宅基地

文章浏览阅读4.5k次,点赞12次,收藏29次。今天主要谈谈硬件产品的成本核算问题。一款新产品上市,面临的直接问题就是「定价」,尤其对于初创企业而言,现金流意味着企业的生命线,定价会直接影响到公司的「毛利润」。毛利润直接决定你银行账户里的收益,是指你卖产品给用户获得的钱与你将产品交付到用户手中需要花费钱的差值。不同类型产品的毛利润差别很大,一般会通过计算毛利率代替。相比于小米硬件成本定价,靠增值服务收费的商业模式,多数硬件公司必须获取足够高的毛利润才能生存下去。无论一款产品要走什么样的定价策略,定价绕不开「成本核算..._硬件产品的成本能算得出来吗

使用IntrospectorCleanupListener 解决quartz引起的内存泄漏问题_quartz 定时任务 报错会引起内存增长吗-程序员宅基地

文章浏览阅读1.7k次。"在服务器运行过程中,Spring不停的运行的计划任务和OpenSessionInViewFilter,使得Tomcat反复加载对象而产生框架并用时可能产生的内存泄漏,则使用IntrospectorCleanupListener作为相应的解决办法。"对于这一句话,引用关于IntrospectorCleanupListener一段解释:spring中的提供了一个名为 org.spring_quartz 定时任务 报错会引起内存增长吗

cordova + ionic混合开发常见问题_ionic4 import org.apache.cordova.file.fileutils;-程序员宅基地

文章浏览阅读1.3k次。1.ion-content 内置元素边距问题在使用的过程中发现ion-content里的元素都距四周有一定的距离,在实际需求中不需要四周距离,经查阅文档去掉ion-content 里面的padding属性即可。2.ionic app 国际化经查阅文档和博客目前ionic+cordova混合开发的app目前国际化较好的方案是ngx-translate2.1 插件安装Angular5安装..._ionic4 import org.apache.cordova.file.fileutils;

随便推点

python在windows下载非最新的安装包_python windows 安装文件下载-程序员宅基地

文章浏览阅读340次。python在windows下载非最新的安装包_python windows 安装文件下载

基于RTMP的视频采集上报播放预警方案设计与实现_小米摄像头流地址-程序员宅基地

文章浏览阅读3.5k次。摘 要为了满足人们日益增长的家庭安防需求,结合基本每家每户都有闲置的智能手机的现状,本文提出了一种基于移动智能端的家庭安防系统构造方案。系统充分利用了智能手机的传感器、摄像头、麦克风、闪光灯以及3G/4G/wifi等网络通讯模块,构造了一个集视频直播、视频点播、远程报警为一体的家庭安防系统。系统采用C/S的架构设计,分设三台客户端和两台服务器。客户端以Android系统为依托分别实现传感器数据采集、视频数据采集、视频播放功能。服务器分为事务服务器和流媒体服务器,事务服务器使用python语言搭建_小米摄像头流地址

sja1000 CAN控制器波特率计算方法详解_bus timing register-程序员宅基地

文章浏览阅读5.4k次。这段时间调试公司处理器can总线,实现最基本的对发实验,can控制器是sja1000,起初因为是对发实验,同样2块开发板,同样内核配置相同,因此时钟以及波特率肯定一样,也没有仔细研究can的时钟以及波特率,今天有客户问can控制器的时钟以及波特率,下午仔细看了一下sja1000手册,并且写了一个由波特率和时钟来计算分频值的小程序,这里总结一下。 sja1000 can工作频率和波特率之间分频_bus timing register

arm处理器异常处理-swi_arm 进入异常之后 lr = pc -4-程序员宅基地

文章浏览阅读1w次。ARM处理器共有7中运行模式: 用户模式(usr) -- 正常程序执行模式 |-- |-- 快速中断模式(fiq) -- 用于高速数据传输和通道处理 特 | 异 | 外部中断模式(irq) _arm 进入异常之后 lr = pc -4

IT行业就只是程序员吗,不要局限于敲代码_ⅰt是程序员吗-程序员宅基地

文章浏览阅读2k次。IT这个行业太广泛了,虽然写代码编程占了其中很重要的一个部分,但是真的不是全部!在IT行业有很多不同的工作角色。开始是一个程序猿,是的,我入行第一份工作确实就是coding,然后做企业级产品的硬件安装工程师,然后是做软件安装工程师,接下来是做解决方案工程师,再然后是系统架构师,再然后是解决方案顾问,现在我在一家外企IT公司负责公司相关产品在几个重点行业的技术支持工作。我除了入行的最开始写了两年程序,其他的职位都不是程序猿!大家不要再把IT局限到写程序了好么,有大把的工作岗..._ⅰt是程序员吗

Tomcat安装与配置(详细教程)_tomcat安装及配置教程-程序员宅基地

文章浏览阅读10w+次,点赞161次,收藏1k次。Tomcat安装与配置,Eclipse集成Tomcat,Eclipse如何配置Tomcat_tomcat安装及配置教程

推荐文章

热门文章

相关标签