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

前言:为什么要装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下载安装包。
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第1张图片
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第2张图片
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第3张图片
我用的是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下载安装包。
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第4张图片
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第5张图片
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第6张图片
请一定选择和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
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第7张图片
二.正式开始安装
(1)启动cmake
我的cmake安装的路径是D:\cmake,所以它的启动项在D:\cmake\bin中,如图所示,启动cmake-gui,经常用的同学可以在桌面创建快捷方式。
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第8张图片
启动cmake之后的界面如图所示:
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第9张图片
(2)创建Mybuild用cmake编译opencv+opencv_contrib
首先创建一个Mybuild的文件夹,位置的话方便管理我放在了文件夹opencv中即之前解压的opencv 4.3.0,此文件夹中已经有了build这个文件夹,这是opencv 4.3.0自己的,Mybuild是我们自己创建的,图片如下:
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第10张图片
在打开的cmake界面中首先看到Where is the source code(源码在哪里)点击右上角Browse Source按钮选择自己下载的opencv的文件夹下的source文件夹:
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第11张图片
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第12张图片
点击选择文件夹:
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第13张图片
接着看到第二行:Where to build the binaries(在哪里构建二进制文件),点击后面的Browse Build,选择我们刚刚创建的Mybuild文件夹,点击选择文件夹
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第14张图片
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第15张图片
效果如下:
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第16张图片接着进行第一次配置,点击左下角的Configure:
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第17张图片
弹出的对话框
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第18张图片
对话框第一项是让你选择电脑上已经安装的Visual Studio版本,我装的是Visual Studio 2017,所以选择Visual Studio 2017.
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第19张图片
第二项是让你选择在visual Studio中的开发平台,我用的是x64,所以选择x64
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第20张图片
跳过第三个文本框,选择下面四个选项的第一个,点击Finsh开始编译。
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第21张图片
编译完第一遍之后如图,Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第22张图片
上面的方框中一片红色,我们再次点击Configure:
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第23张图片
此使上面的红色消失,下面的文本框中在每次Configure时都会出现红色警告字体,不用在意,效果如下。
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第24张图片
接下来是关键步骤,关系到成败:
在cmake界面的上面部分,选择Build_opencv_world选项,在后面的方框里面打勾,这个是为了后面在Visual Studio2017中给项目配置属性时,少输入一点链接库,否则会手动输入几十个链接库
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第25张图片
接着勾选OPENCV_ENABLE_NONFREE,在后面打勾
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第26张图片
接着找到OPENCV_EXTRA_MODULES_PATH,横条向右拉到底,点击它的后半部分,出现三个点的按钮,点击它,弹出对话框
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第27张图片
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第28张图片
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第29张图片
选择下载解压好的opencv_contrib-4.3.0文件夹下modules文件夹,我的路径为:D:/opencv/opencv_contrib-4.3.0/modules,点击选择文件夹
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第30张图片
效果如下:
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第31张图片
点击Configure:
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第32张图片
上方出现一片红,继续点击Configure
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第33张图片
红色消失,如果没消失就继续点击Configure。
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第34张图片
最后点击Generate
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第35张图片
下面的文本框里面出现Configuring done,Generating done。
注意:
在cmake中不管是勾选一条项目Configure一次,还是勾选多个项目一起Configure都是可行的,只要保证cmake上半部分的选择框的不出现红色就行,出现红色时可以通过多次点击Configure选项消除。

Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第36张图片
最后点击Open Project,打开OpenCV.sln
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第37张图片
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第38张图片
这个文件在自己所建立的MyBuild中,因此也可以在Mybuild文件夹里找到并打开,打开后cmake可以关闭或者保持原样都无所谓。
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第39张图片
三.Visual Studio 2017中生成解决方案
注意:我参考了不下10篇的博客,以上的内容都可以找到相同的地方,但是接下来的步骤是他们所不具备的,也是我多次安装失败的主要原因。关键是缺少文件,必须单独下载,文件在我的百度云里面,下面是地址(白嫖党的胜利)
文件的百度云和提取码:
链接:https://pan.baidu.com/s/1P2X-r1rfK-svHorbdj4G_w
提取码:kyp6
先把百度云里面下载到的文件,如图所示,全都复制到opencv_contrib-4.3.0/modules/xfeatures2d/src/路径中
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第40张图片
复制完以后的结果图如下:
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第41张图片
然后回到OpenCV.sln的界面,选择菜单栏上的生成,选择重新生成解决方案,我的是89个方案,每个人的方案可能不同,这个和opencv的版本以及在cmake界面上勾选的内容多少有关,因为有的人要用python、有的人还要用到CUDA加速等内容,生成的时间比较长,耐心等待即可。
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第42张图片
重新生成解决方案后我成功80个,失败0个,跳过9个,这里是出错最多的地方,我在阅读了其他人的博客,但是几乎没人提到要把上述我的百度云文件放到指定路径里面,所以生成的时候出现很多错误,另外把上述百度云中的文件安装到指定路径后如果生成后有少量报错,比如报错一个或两个,只要不是你所需要的功能就无伤大雅,可以接受。
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第43张图片
接着,在左边的解决方案CMakeTargets下找到INSTALL,右击选择“仅用于项目”下的”仅生成INSTALL“
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第44张图片
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第45张图片
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第46张图片
结果如下
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第47张图片
关闭项目,这一阶段结束。
四:环境及路径配置
已经安装过Opencv的小伙伴应该都已经配置过环境,完成以上步骤后,再次配置环境无需删除之前的配置,保留就好,没啥影响。
重点:复制有关动态库至系统目录下*\opencv\Mybuild\install\x64\vc15\bin下的.dll文件复制至 C:\Windows\System32 和 C:\Windows\SysWOW64 目录下。
这一步如果不做的话,后面创建程序时将无法运行。
如图所示:这里体现了之前在cmake中勾选Build_opencv_world的优势,如果不勾选将会出现几十个.dll文件
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第48张图片
接着开始配置opencv的环境,首先右击此电脑,【此电脑】-【属性】-【高级系统设置】-【环境变量】-【系统变量】
在【Path】里面添加:D:\opencv\Mybuild\install\x64\vc15\bin(这是我电脑里面的路径,同学们根据自己的路径适当修改)如果 visual studio 在修改环境变量之前就打开了,需要重启visual studio。
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第49张图片接下来新建一个visual studio 2017的C++控制台项目,配置环境,我的项目名字叫feature2D,右击,选择属性;
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第50张图片
①配置包含目录:
在属性页中,【VC++目录】—【包含目录】—【编辑】—添加3个目录
D:\opencv\Mybuild\install\include
D:\opencv\Mybuild\install\include\opencv
D:\opencv\Mybuild\install\include\opencv2
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第51张图片
结果如图所示:
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第52张图片
②配置库目录:
接着上步,在【VC++目录】—【库目录】编辑并添加路径。
路径为:D:\opencv\Mybuild\install\x64\vc15\libVisual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第53张图片
③配置链接库:
接着上步,在【链接器】—【输入】—【附加的依赖项】,添加文件路径在.lib文件夹内(D:\opencv\Mybuild\install\x64\vc15\lib)。找到以下两个文件名:
opencv_world430d.lib
opencv_img_hash430d.lib
带【d】对应 【Debug x64】位版本。
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第54张图片
结果如图所示,环境配置结束。
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第55张图片
五:代码测试:SURF特征点检测示例

//--------------------------------------【程序说明】--------------------
//		程序描述:SURF特征点检测示例

//---------------------------------【头文件、命名空间包含部分】----------------------------
//		描述:包含程序所使用的头文件和命名空间
//------------------------------------------------------------------------------------------------
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include"opencv2/xfeatures2d/nonfree.hpp"
#include 
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;
}

效果图如下:
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第56张图片
Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)_第57张图片总结:
最关键的是将百度云中的文件放到指定的路径之中,并且复制有关动态库
\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

你可能感兴趣的:(数据挖掘)