Win10下VS2017一步到位配置OpenCV4.1.0+contrib

经常用到OpenCV,由于各种问题总是经常要重装。记录一下安装OpenCV踩坑过程,希望能够帮到大家,同时也是给自己一个备份,省得以后到处找浪费时间。
这是我参考网上博客的教程配置的过程,只是可行解不一定是最优解,在我的机子上能够成功,由于环境不同,可能会出现不同问题,酌情参考哈哈。

基本配置

Windows10
VS2017
opencv-4.1.0-vc14_vc15
opencv_contrib-4.1.0
CMake3.14.0
注意opencv和opencv_contrib版本的匹配。

安装流程

假定已经安装好VS2017和CMake。没有安装的话直接安装就行。由于一些众所周知的原因,contrib编译需要梯子,不然会失败。

一、CMake编译opencv4.1.0和contrib

下载完opencv以及contrib之后,得到的是一个exe文件以及zip文件。
在这里插入图片描述
分别解压。我是解压到D:\OpenCV4_1\下。contrib我是直接解压到D盘。
在这里插入图片描述

1、添加opencv4.1.0

解压完后,打开CMake,第一个路径选择解压出来的opencv目录下sources文件夹,第二个路径选择你要build的路径,最好不要放在opencv目录下。之后点击configure。
在这里插入图片描述
弹出的对话框中选择VS2017,64位平台选择x64,当然也可以选择x86。点击finish。
在这里插入图片描述

configure完成之后会出现下面红色的界面。看下框中是否有报错,没有报错的话再点击一次configure。

在这里插入图片描述
再次configure后,正常情况下所有红色界面都会变成白色的。

在这里插入图片描述
到这一步只是完成了opencv4.1.0的基本模块的部分。接下来要添加contrib部分。

2、添加contrib模块

在上一步的界面中点击勾选BUILD下的BUILD_opencv_world,让之后生成的opencv的lib和dll包含在一个文件opencv_world.lib和opencv_world.dll内。
在这里插入图片描述
接下来在OPENCV下勾选OPENCV_ENABLE_NONFREE选项,这样才能使用SIFT等受专利保护的算法。
同时在OPENCV_EXTRA_MODULES_PATH 双击添加解压出来的contrib文件夹下的module文件夹的路径。
在这里插入图片描述
选完之后再次点击configure。会出现下面结果,若出现不同的红色选项说明之前选的跟我有出入,只要不报错就可以。

在这里插入图片描述
如果没报错,那就再点configure。然后会变成全白,如下:

扫描二维码关注公众号,回复: 11316705 查看本文章

在这里插入图片描述
没有问题,那就点击generate生成。正常结果如下:

在这里插入图片描述
显示generating done说明build成功。

到这里CMake步骤完成,接下来就是VS2017配置。

二、VS2017编译生成OpenCV库

在刚刚的build出来的cmake_opencv文件夹内找到OpenCV.sln,用VS2017打开它 。

在这里插入图片描述
打开之后注意一下编译器的类型,一般选Debug和x64 。如果要生成release的选择release就好。

在解决方案处右键–>生成解决方案。然后就等待,20多分钟吧,可以来一局游戏或者刷会视频放松放松。。

在这里插入图片描述
生成解决方案后,在解决方案处找到INSTALL,然后右键->仅用于项目->仅生成INSTALL。等待生成结束。

在这里插入图片描述
生成INSTALL后,在cmake_opencv/install文件夹下就生成了bin,etc,include,x64等文件。

在这里插入图片描述
然后就将install内全部文件复制到opencv/build中:

在这里插入图片描述
到这里opencv+contrib已经编译完成,下一步就是配置路径,这样才能在VS2017中调用OpenCV。

三、配置VS2017路径

关于路径,主要有添加系统环境变量,VS的包含目录,库目录以及依赖项。

1、添加环境变量

Win10中搜索框内搜索环境变量,点击进去会弹出系统属性对话框,点击对话框内的环境变量,在出现的新对话框中双击Path,在Path中添加D:\OpenCV4_1\opencv\build\bin路径。

在这里插入图片描述

2、配置包含目录库目录等

首先创建一个VS工程,添加main.cpp,可以用以下例子来实验。

#include <opencv2/opencv.hpp>
#include <opencv2/xfeatures2d.hpp>

int main()
{
	cv::Mat imageL = cv::imread("8.png");
	cv::Mat imageR = cv::imread("9.png");
	cv::Ptr<cv::xfeatures2d::SURF> surf = cv::xfeatures2d::SURF::create();
	//特征点
	std::vector<cv::KeyPoint> keyPointL, keyPointR;
	//单独提取特征点
	surf->detect(imageL, keyPointL);
	surf->detect(imageR, keyPointR);
	//画特征点
	cv::Mat keyPointImageL;
	cv::Mat keyPointImageR;
	drawKeypoints(imageL, keyPointL, keyPointImageL, cv::Scalar::all(-1), cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
	drawKeypoints(imageR, keyPointR, keyPointImageR, cv::Scalar::all(-1), cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);

	//显示窗口
	cv::namedWindow("KeyPoints of imageL");
	cv::namedWindow("KeyPoints of imageR");

	//显示特征点
	cv::imshow("KeyPoints of imageL", keyPointImageL);
	cv::imshow("KeyPoints of imageR", keyPointImageR);

	//特征点匹配
	cv::Mat despL, despR;
	//提取特征点并计算特征描述子
	surf->detectAndCompute(imageL, cv::Mat(), keyPointL, despL);
	surf->detectAndCompute(imageR, cv::Mat(), keyPointR, despR);

	std::vector<cv::DMatch> matches;

	//如果采用flannBased方法 那么 desp通过orb的到的类型不同需要先转换类型
	if (despL.type() != CV_32F || despR.type() != CV_32F)
	{
		despL.convertTo(despL, CV_32F);
		despR.convertTo(despR, CV_32F);
	}

	cv::Ptr<cv::DescriptorMatcher> matcher = cv::DescriptorMatcher::create("FlannBased");
	matcher->match(despL, despR, matches);

	//计算特征点距离的最大值 
	double maxDist = 0;
	for (int i = 0; i < despL.rows; i++)
	{
		double dist = matches[i].distance;
		if (dist > maxDist)
			maxDist = dist;
	}

	//挑选好的匹配点
	std::vector< cv::DMatch > good_matches;
	for (int i = 0; i < despL.rows; i++)
	{
		if (matches[i].distance < 0.5*maxDist)
		{
			good_matches.push_back(matches[i]);
		}
	}
	cv::Mat imageOutput;
	cv::drawMatches(imageL, keyPointL, imageR, keyPointR, good_matches, imageOutput);

	cv::namedWindow("picture of matching");
	cv::imshow("picture of matching", imageOutput);
	cv::waitKey(0);
	return 0;
}

在新建的工程中依次点击 视图->属性管理器

在这里插入图片描述
在左侧的属性管理器中点开,选择刚刚的Debug x64 ->鼠标放到Microsoft.Cpp.x64.user上点击右键->属性,打开属性面板。
在这里插入图片描述
在这里插入图片描述
双击包含目录,添加以下路径(自己的相应路径),确定:
在这里插入图片描述
再在库目录中添加D:\OpenCV4_1\opencv\build\x64\vc15\bin,确定:
在这里插入图片描述

3、接下来添加附加依赖项

在刚刚的Microsoft.Cpp.x64.user属性页中点击 链接器->输入->附加依赖项 ->添加opencv_world410d.lib,确定 。
在这里插入图片描述
至此基本配置全部完成!!

运行我们新建的工程,通过SURF算法可以得到两幅图片的特征点以及匹配结果(结果不理想,还得调参哈哈),说明SURF能用。
结果虽然不理想,但至少安装是成功的,撒花!!!
在这里插入图片描述


P.S.
刚刚生成的cmake_opencv文件夹很大,我这生成的有9.3G,如果空间不足的话可以直接删除。。
在这里插入图片描述
最后剩下的OpenCV库有1.3G,大小还行,可以接受。

如果你跟着我一步一步配置下来,还是没有成功的话,,,

这里有我编译好的基本模块+contrib库,可以拿去试试:百度云 提取码:evjy
应该直接配置VS路径就行了 …

参考

https://blog.csdn.net/weixin_42171170/article/details/105250977

猜你喜欢

转载自blog.csdn.net/weixin_40313940/article/details/106304053
今日推荐