【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

智能推荐

while循环&CPU占用率高问题深入分析与解决方案_main函数使用while(1)循环cpu占用99-程序员宅基地

文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。​​​​​​while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99

【无标题】jetbrains idea shift f6不生效_idea shift +f6快捷键不生效-程序员宅基地

文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效

node.js学习笔记之Node中的核心模块_node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是-程序员宅基地

文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是

数学建模【SPSS 下载-安装、方差分析与回归分析的SPSS实现(软件概述、方差分析、回归分析)】_化工数学模型数据回归软件-程序员宅基地

文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件

利用hutool实现邮件发送功能_hutool发送邮件-程序员宅基地

文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件

docker安装elasticsearch,elasticsearch-head,kibana,ik分词器_docker安装kibana连接elasticsearch并且elasticsearch有密码-程序员宅基地

文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码

随便推点

Python 攻克移动开发失败!_beeware-程序员宅基地

文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware

Swift4.0_Timer 的基本使用_swift timer 暂停-程序员宅基地

文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停

元素三大等待-程序员宅基地

文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待

Java软件工程师职位分析_java岗位分析-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析

Java:Unreachable code的解决方法_java unreachable code-程序员宅基地

文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code

标签data-*自定义属性值和根据data属性值查找对应标签_如何根据data-*属性获取对应的标签对象-程序员宅基地

文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象

推荐文章

热门文章

相关标签