前言:为什么要装opencv_contrib
opencv3的版本之后只包含基本内容,众多著名的检测算子(如SIFT、SURF和ORB等内容)因为版权问题转移到了一个名为xfeature2d的第三方库中,而opencv_contrib就包含了xfeature2d这个库的内容,因此必须安装opencv_contrib。如果本来已经装了OpenCV,想要再装OpenCV_contrib,不必卸载OpenCV。直接安装cmake,将opencv重新编译,然后加入OpenCV_contrib即可。原来已经配置好的VS环境也不会受到影响,添加好包含目录和库文件、增加环境变量后,contrib功能直接用就行。
一.准备工作
安装所需软件
(0)Visual Studio 2017的安装不再赘述,随便找个教程就能安装
(1)opencv:https://github.com/opencv/opencv
github中opencv界面如下,点击左上角Branch:master,点击Tags,选择自己需要的版本,然后点击右上角的Clone,点击Download ZIP下载安装包。



我用的是opencv4.3.0版本,你可以选择自己喜欢的版本,但是要注意后期下载opencv_contirb时要选择对应的版本,否则可能失败。我opencv下载完之后解压在了D盘,路径为D:\opencv
(2)opencv_contrib:https://github.com/opencv/opencv_contrib
github中opencv_contrib界面如下,点击左上角Branch:master,点击Tags,选择自己需要的版本,然后点击右上角的Clone,点击Download ZIP下载安装包。



请一定选择和opencv一样的版本号,不然可能会出错。因为我的opencv版本是4.3.0,所以我选择了opencv_contrib 4.3.0。下载完成之后解压即可。我为了方便管理把opencv_contrib 4.3.0解压到了刚刚解压完的opencv中,路径为D:\opencv\opencv_contrib-4.3.0
(3)cmake:https://cmake.org/download/
因为我的opencv是在Visual Studio 2017中Debug x64环境下运行的,所以我选择的版本是Windows win64-x64 ZIP cmake-3.18.0-winx64.zip,下载完之后解压,我解压到了D盘中,路径是D:\cmake

二.正式开始安装
(1)启动cmake
我的cmake安装的路径是D:\cmake,所以它的启动项在D:\cmake\bin中,如图所示,启动cmake-gui,经常用的同学可以在桌面创建快捷方式。

启动cmake之后的界面如图所示:

(2)创建Mybuild用cmake编译opencv+opencv_contrib
首先创建一个Mybuild的文件夹,位置的话方便管理我放在了文件夹opencv中即之前解压的opencv 4.3.0,此文件夹中已经有了build这个文件夹,这是opencv 4.3.0自己的,Mybuild是我们自己创建的,图片如下:

在打开的cmake界面中首先看到Where is the source code(源码在哪里)点击右上角Browse Source按钮选择自己下载的opencv的文件夹下的source文件夹:


点击选择文件夹:

接着看到第二行:Where to build the binaries(在哪里构建二进制文件),点击后面的Browse Build,选择我们刚刚创建的Mybuild文件夹,点击选择文件夹


效果如下:
接着进行第一次配置,点击左下角的Configure:

弹出的对话框

对话框第一项是让你选择电脑上已经安装的Visual Studio版本,我装的是Visual Studio 2017,所以选择Visual Studio 2017.

第二项是让你选择在visual Studio中的开发平台,我用的是x64,所以选择x64

跳过第三个文本框,选择下面四个选项的第一个,点击Finsh开始编译。

编译完第一遍之后如图,
上面的方框中一片红色,我们再次点击Configure:

此使上面的红色消失,下面的文本框中在每次Configure时都会出现红色警告字体,不用在意,效果如下。

接下来是关键步骤,关系到成败:
在cmake界面的上面部分,选择Build_opencv_world选项,在后面的方框里面打勾,这个是为了后面在Visual Studio2017中给项目配置属性时,少输入一点链接库,否则会手动输入几十个链接库

接着勾选OPENCV_ENABLE_NONFREE,在后面打勾

接着找到OPENCV_EXTRA_MODULES_PATH,横条向右拉到底,点击它的后半部分,出现三个点的按钮,点击它,弹出对话框



选择下载解压好的opencv_contrib-4.3.0文件夹下modules文件夹,我的路径为:D:/opencv/opencv_contrib-4.3.0/modules,点击选择文件夹

效果如下:

点击Configure:

上方出现一片红,继续点击Configure

红色消失,如果没消失就继续点击Configure。

最后点击Generate

下面的文本框里面出现Configuring done,Generating done。
注意:
在cmake中不管是勾选一条项目Configure一次,还是勾选多个项目一起Configure都是可行的,只要保证cmake上半部分的选择框的不出现红色就行,出现红色时可以通过多次点击Configure选项消除。


最后点击Open Project,打开OpenCV.sln


这个文件在自己所建立的MyBuild中,因此也可以在Mybuild文件夹里找到并打开,打开后cmake可以关闭或者保持原样都无所谓。

三.Visual Studio 2017中生成解决方案
注意:我参考了不下10篇的博客,以上的内容都可以找到相同的地方,但是接下来的步骤是他们所不具备的,也是我多次安装失败的主要原因。关键是缺少文件,必须单独下载,文件在我的百度云里面,下面是地址(白嫖党的胜利)
文件的百度云和提取码:
链接:https://pan.baidu.com/s/1P2X-r1rfK-svHorbdj4G_w
提取码:kyp6
先把百度云里面下载到的文件,如图所示,全都复制到opencv_contrib-4.3.0/modules/xfeatures2d/src/路径中

复制完以后的结果图如下:

然后回到OpenCV.sln的界面,选择菜单栏上的生成,选择重新生成解决方案,我的是89个方案,每个人的方案可能不同,这个和opencv的版本以及在cmake界面上勾选的内容多少有关,因为有的人要用python、有的人还要用到CUDA加速等内容,生成的时间比较长,耐心等待即可。

重新生成解决方案后我成功80个,失败0个,跳过9个,这里是出错最多的地方,我在阅读了其他人的博客,但是几乎没人提到要把上述我的百度云文件放到指定路径里面,所以生成的时候出现很多错误,另外把上述百度云中的文件安装到指定路径后如果生成后有少量报错,比如报错一个或两个,只要不是你所需要的功能就无伤大雅,可以接受。

接着,在左边的解决方案CMakeTargets下找到INSTALL,右击选择“仅用于项目”下的”仅生成INSTALL“



结果如下

关闭项目,这一阶段结束。
四:环境及路径配置
已经安装过Opencv的小伙伴应该都已经配置过环境,完成以上步骤后,再次配置环境无需删除之前的配置,保留就好,没啥影响。
重点:复制有关动态库至系统目录下*\opencv\Mybuild\install\x64\vc15\bin下的.dll文件复制至 C:\Windows\System32 和 C:\Windows\SysWOW64 目录下。
这一步如果不做的话,后面创建程序时将无法运行。
如图所示:这里体现了之前在cmake中勾选Build_opencv_world的优势,如果不勾选将会出现几十个.dll文件

接着开始配置opencv的环境,首先右击此电脑,【此电脑】-【属性】-【高级系统设置】-【环境变量】-【系统变量】
在【Path】里面添加:D:\opencv\Mybuild\install\x64\vc15\bin(这是我电脑里面的路径,同学们根据自己的路径适当修改)如果 visual studio 在修改环境变量之前就打开了,需要重启visual studio。
接下来新建一个visual studio 2017的C++控制台项目,配置环境,我的项目名字叫feature2D,右击,选择属性;

①配置包含目录:
在属性页中,【VC++目录】—【包含目录】—【编辑】—添加3个目录
D:\opencv\Mybuild\install\include
D:\opencv\Mybuild\install\include\opencv
D:\opencv\Mybuild\install\include\opencv2

结果如图所示:

②配置库目录:
接着上步,在【VC++目录】—【库目录】编辑并添加路径。
路径为:D:\opencv\Mybuild\install\x64\vc15\lib
③配置链接库:
接着上步,在【链接器】—【输入】—【附加的依赖项】,添加文件路径在.lib文件夹内(D:\opencv\Mybuild\install\x64\vc15\lib)。找到以下两个文件名:
opencv_world430d.lib
opencv_img_hash430d.lib
带【d】对应 【Debug x64】位版本。

结果如图所示,环境配置结束。

五:代码测试:SURF特征点检测示例

//--------------------------------------【程序说明】--------------------
//      程序描述:SURF特征点检测示例//---------------------------------【头文件、命名空间包含部分】----------------------------
//      描述:包含程序所使用的头文件和命名空间
//------------------------------------------------------------------------------------------------
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include"opencv2/xfeatures2d/nonfree.hpp"
#include <iostream>
using namespace cv;
using namespace xfeatures2d;//-----------------------------------【main( )函数】--------------------------------------------
//   描述:控制台应用程序的入口函数,我们的程序从这里开始执行
//-----------------------------------------------------------------------------------------------
int main(int argc, char** argv)
{//【0】改变console字体颜色    system("color 2F");//【0】显示帮助文字  ShowHelpText();//【1】载入源图片并显示Mat srcImage1 = imread("1.jpg");Mat srcImage2 = imread("2.jpg");if (!srcImage1.data || !srcImage2.data)//检测是否读取成功{printf("读取图片错误,请确定目录下是否有imread函数指定名称的图片存在~! \n"); return false;}imshow("原始图1", srcImage1);imshow("原始图2", srcImage2);//【2】定义需要用到的变量和类int minHessian = 400;//定义SURF中的hessian阈值特征点检测算子//SurfFeatureDetector detector( minHessian );//定义一个SurfFeatureDetector(SURF) 特征检测类对象Ptr<SurfFeatureDetector> detector = SurfFeatureDetector::create(minHessian);//设置SURF特征检测器std::vector<KeyPoint> keypoints_1, keypoints_2;//vector模板类是能够存放任意类型的动态数组,能够增加和压缩数据//【3】调用detect函数检测出SURF特征关键点,保存在vector容器中detector->detect(srcImage1, keypoints_1);detector->detect(srcImage2, keypoints_2);//【4】绘制特征关键点.Mat img_keypoints_1; Mat img_keypoints_2;drawKeypoints(srcImage1, keypoints_1, img_keypoints_1, Scalar::all(-1), DrawMatchesFlags::DEFAULT);drawKeypoints(srcImage2, keypoints_2, img_keypoints_2, Scalar::all(-1), DrawMatchesFlags::DEFAULT);//【5】显示效果图imshow("特征点检测效果图1", img_keypoints_1);imshow("特征点检测效果图2", img_keypoints_2);waitKey(0);return 0;
}

效果图如下:

总结:
最关键的是将百度云中的文件放到指定的路径之中,并且复制有关动态库
\opencv\Mybuild\install\x64\vc15\bin下的.dll文件复制至路径C:\Windows\System32 和 C:\Windows\SysWOW64 目录下。

参考博客
1.https://blog.csdn.net/talender/article/details/82841019
2.https://blog.csdn.net/weixin_42012977/article/details/82992962?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase
3.https://blog.csdn.net/GIS_feifei/article/details/102531891
4.https://blog.csdn.net/youlinhuanyan/article/details/104109599

Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)相关推荐

  1. Win10 下Visual Studio 2017源码编译Paddle

    Win10 下Visual Studio 2017源码编译Paddle 1.准备工作 Visual Studio 2017 Python 3.8.10 CMake 3.22.0-rc2 熟悉官方文档: ...

  2. 从头开始学eShopOnContainers——Visual Studio 2017环境配置

    一.安装和配置Docker环境 1.安装Docker CE for Windows 从官方网站下载并安装,https://docs.docker.com/docker-for-windows/inst ...

  3. visual studio 2017 和qt 编译 bitcon源代码

    visual studio 2017 qt 5.7.1(别人已经编译好的静态库,为什么用别人编译好的,自己编译老是编译错误,?) 1. 安装vcpkg.将应用程序内的lib编译成功.设置编译选项为MT ...

  4. C++编程【Visual Studio 2017 环境搭建教程】【附:软件安装包】

    学习网址:哔哩哔哩网站--黑马程序员C++从0到1入门编程(附C++编程环境搭建教程) 软件安装包:visual_studio_community_2017_version_15.3.exe 链接:h ...

  5. 利用Anaconda安装pytorch和paddle深度学习环境+pycharm安装---免额外安装CUDA和cudnn(适合小白的保姆级教学)

    系列文章目录 ​​​​​​​深度学习原理-----线性回归+梯度下降法 深度学习原理-----逻辑回归算法 深度学习原理-----全连接神经网络​​​​​​​ 深度学习原理-----卷积神经网络 深度 ...

  6. 1、Visual Studio 2017安装

    目录 一.简介 二.安装步骤 三.Visual Studio 2017的使用 一.简介 Visual Studio是微软推出的一款C++编译器,将"高级语言"翻译为"机器 ...

  7. 如何使用visual studio 2017创建C语言项目

    使用visual studio 2017创建一个C语言项目,步骤如下: (1)打开Visual Studio 2017环境后出现欢迎界面,如图1所示. 图1  Visual Studio 2017欢迎 ...

  8. 【visual studio 2017】基本使用过程,新手教学

    文章目录 1 软件安装 2 解决方案 3 编译(生成) 4 执行(调试) 5 视图 6 工具 7 查找与替换 8 debug release 9 dll动态文件库调用 10 软件使用常用技巧 1 软件 ...

  9. Windows10 + Visual Studio 2017 + CMake +OpenCV编译、开发环境配置及测试

    由于最近需要使用OpenCV,本人需要在自己的PC上使用OpenCV,因此最近一直在研究如何使用Visual Studio编译OpenCV源代码并搭建开发环境,折腾了很长时间,查阅了很多相关资料,终于 ...

最新文章

  1. CVPR2019论文解读:单眼提升2D检测到6D姿势和度量形状
  2. 浏览器插件 火狐插件
  3. 机器人雅可比矩阵的求法_构造法
  4. 成轴对称的两组图片能被分成两类吗?
  5. php图书信息浏览器,使PHP即时输出结果到浏览器
  6. 【转】C++11 并发指南五(std::condition_variable 详解)
  7. 你做过的项目会逐渐形成你自己的认知和别人对于你的看法~剑桥工程硕士陶瓷有感
  8. 转: Executor类
  9. 为什么不可以使用哈曼顿距离_请对比下欧式距离和曼哈顿距离的差别
  10. powerdesigner15(pd)+Oracle 11g 开发小问题
  11. Python灰度图像彩色化
  12. 自学c语言后的感受,一路走来,浅谈c语言的学习感想
  13. 找到多个与名为“Login”的控制器匹配的类型
  14. 第10章 评价分类结果 学习上
  15. 工作流框架的设计要点
  16. 【强烈推荐】Java入门基础笔记,超全!
  17. 新下载的工程,启动tomcat出现识别文件失败的现象。No qualifying bean of type 'com.kanq.platform.cert.mapper.CertificateSjdr
  18. line-height绝对值和相对值的区别
  19. 程序员爆改《GTA OL》代码后加载速度快了 70%,R 星采纳并奖励 1 万美元
  20. java中的递归算法_java递归实现

热门文章

  1. Vue学习笔记——第二部分
  2. python开发商城实战视频_商城项目实战_商城项目实战教程_商城项目实战视频教程 _课课家...
  3. 这几个好用的网工提升工具,都是老杨的私人珍藏
  4. 接口自动化测试之Fiddler使用教程
  5. Spring中AOP的使用、切点表达式
  6. iOS app性能优化
  7. 加入闲鱼是一种什么体验?
  8. JavaScript中的 new 操作符到底做了些什么?
  9. Aspnet core迁移 wwwroot静态文件文件
  10. 信号能量密度公式_信号常用术语