Win10+VS2015+OpenCV3.3.0下扩展OpenCV_contrib3.3.0

Win10+VS2015+OpenCV3.3.0下扩展OpenCV_contrib3.3.0

一、说明

图像处理及SLAM的学习过程中想自己尝试一些特征匹配代码,结果发现OpenCV3版本的特征匹配库函数都在OpenCV_contrib扩展包里,所以在已安装OpenCV3.3.0的VS环境下增添opencv_contrib扩展包,记录该过程及遇到问题的解决办法,最后成功安装。

安装前系统已有设置:

win10+VS2015+opencv3.3.0+cmake2.x(具体我忘了❤)

安装后系统设置:

win10+VS2015+opencv3.3.0+opencv_contrib3.3.0+cmake3.16.2

二、安装步骤

1、下载对应版本的opencv_contrib(注意:一定是要对应版本的哦!)

opencv_contrib3.3.0
其他版本自行下载,网上很多资源~
下载后的压缩包解压到opencv的安装目录下(如下我的):
Win10+VS2015+OpenCV3.3.0下扩展OpenCV_contrib3.3.0_第1张图片

2、cmake_gui中的操作(联网哦)

  1. 打开cmake-gui
  2. 在Where is the source code中选择opencv/sources目录
  3. 在Where to build the binaries 中选择opencv/build目录(注意:这里需要把opencv/build里之前的内容全部删去,留下一个build空目录)
  4. 点击configure,等待配置完成
  5. 在弹出的对话框里选择编译的工程平台,例如我的是VS 14 2015 Win64(我之前安装的是cmake2.x,竟找不到VS2015对应版本,这时需要卸载cmake重现装个更先进版本了)
  6. 点击Finish,configure过程中,会重新Download很多文件,下载速度比较慢,耐心等待,直到出现configuring done表明结束
  7. 在变量区中找到OPENCV_EXTRA_MODULES_PATH,将其选择为opencv_contrib/modules目录,并勾选BUILD_opencv_world(看首字母往上找菜单),再点击configure,又会下载一堆东西,耐心等待
  8. 直到变量区没有红色变量,否则反复点击configure
  9. 点击generate

3、使用VS生成带有opencv_contrib接口的opencv库

VS打开OpenCV.sln

CMake Genarate成功后,会在CMake output目录下生成一堆东西,在根目录下,找到OpenCV.sln,然后使用相应的visual studio打开加载该解决方案。

VS中的操作

1、在解决方案资源管理器中右击解决方案‘OpenCV’,选择Debug x64,点击生成->生成解决方案开始编译,这个过程比较漫长,需要耐心
2、没有错误,在解决方案资源管理器中的CMakeTargets目录中,点击“仅用于项目->仅生成INSTALL”,即可编译生成dll相关文件
(有的教程里下一步编译选项调整为Release x64,再重复一下以上的过程,但我当时参考的教程没有做,我就没有做)

重新生成解决方案

在opencv目录下的build/install目录中,可以看到生成了一堆文件

4、重新配置环境变量

为计算机添加系统变量

1、右键电脑【属性】 ,【高级系统设置】 ,【环境变量】 , 【系统变量】【Path】, 在变量值后加编译目录\install\x64\vc14\bin 的完整路径
2、添加用户变量设置:
变量名:OPENCV
变量值:D:\opencv\build\install

VS系统中的环境变量

1、 属性管理器–>设置–>VC++目录–>包含目录,添加:
在这里插入图片描述
2、属性管理器–>设置–>VC++目录–>库目录,添加:
在这里插入图片描述
3、连接器–>输入–>附加依赖项,添加库:
在这里插入图片描述
即该文件夹下的两个lib文件
Win10+VS2015+OpenCV3.3.0下扩展OpenCV_contrib3.3.0_第2张图片

三、测试

用以下代码测试:

#include"stdafx.h"
#include 
#include 
#include "opencv2/opencv.hpp"  
#include"opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include"opencv2/xfeatures2d.hpp"
using namespace cv;
using namespace std;
int main()
{
	Mat img_1 = imread("E:/exercise_temp/image_collect/1.jpg", CV_LOAD_IMAGE_COLOR);
	Mat img_2 = imread("E:/exercise_temp/image_collect/2.jpg", CV_LOAD_IMAGE_COLOR);
	Ptr<Feature2D> sift = xfeatures2d::SIFT::create();
	vector<KeyPoint> keypoints_1, keypoints_2;
	Mat descriptors_1, descriptors_2;
	sift->detectAndCompute(img_1, noArray(), keypoints_1, descriptors_1);
	sift->detectAndCompute(img_2, noArray(), keypoints_2, descriptors_2);
	//绘制特征点(关键点)
	drawKeypoints(img_1, keypoints_1, descriptors_1, Scalar(0, 0, 255));
	drawKeypoints(img_2, keypoints_2, descriptors_2, Scalar::all(-1), DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
	imshow("img_1", descriptors_1);
	imshow("img_2", descriptors_2);
	waitKey(0);
	return 0;
}

一些问题的解决:

1、有的问题可能是配置完系统变量后要重启一下电脑,我当时出现许多问题不断摸索过程中重启电脑好几次,所以也可以尝试解决

2、如果跑工程出现无法定位程序输入点错误,有可能是之前配置过opencv,就需要检查上述步骤环境变量里的path处,把原路径修改为新的路径,并且将属性管理器里的VC++目录的库文件目录和包含目录按照上文说的那样改,接着关键是要将C盘Windows目录下的syswow64文件夹和system32文件夹里的带有opencv字样的 .dll文件全部删掉,然后再跑工程。
我当时出现了这个问题,删除了system32文件夹的如下文件:
在这里插入图片描述
然后syswow64文件里就没找到opencv字样的文件就没管,再跑了一遍代码就成功了!

你可能感兴趣的:(图像处理)