OpenCV之扩展模块安装

本文是参考博主:https://blog.csdn.net/weixin_41695564/article/details/79925379   但本人在安装的过程中还是犯了几个关键错误,导致浪费了很多时间,所以再原博文的基础上,将我遇到的问题也标明出来,供参考。以下标注ps的地方是本人指出来的问题。

 本文将演示OpenCV3.1.0的版本安装,其他版本也可以参考,主要是把几个关键地方注意到即可。

OpenCV3.1.0下载地址: 

https://sourceforge.net/projects/opencvlibrary/files/opencv-win/3.1.0/opencv-3.1.0.exe/download

OpenCV3.1.0安装教程: 

https://blog.csdn.net/qq_17550379/article/details/78201442

OpenCVcontrib下载地址: 
https://github.com/opencv/opencv_contrib

cmake-gui下载地址(3.11.0): https://cmake.org/download/

PS:这里的OpenCVcontrib下载的版本必须与OpenCV下载的版本一样!!!

一、下载OpenCV contrib

    这里我事先已经下载并配置好了VS2015和OpenCV3.1.0,所以我们直接下载OpenCVcontrib,进入上面给出的网址,点击releases,如下:

进入releases以后:

由于我的OpenCV版本是3.1.0,因此我们下载对应的zip压缩文件到指定文件夹下,如下:

 

下载好以后我们对其进行解压缩:

进入解压后的文件夹下:

二、下载cmake-gui

我们进入网址,选择win64位版本对应的压缩包,如下所示:

点击下载:

下载好以后,我们对其进行解压缩:

然后我们在OpenCV的安装目录下新建一个newbuild文件夹,用来存放编译扩展模块后的生成文件:

打开其bin目录下的cmake-gui.exe工具:

运行该程序,输入如下目录:

然后点击Generate进行编译:

第一次导出时需要设置后面用来编译此OpenCV.sln工程的VS的版本(这里特别要注意的是,自己机器上是否装有相应的VS版本,如果没有装,还是要编译就会出错, 可能是找不到对应的工具原因,以及选择X86和X64)。
 PS:这里的选择很重要!!!!!!这里选择不同的位数,之后生成一个install文件里面会有对应位数(下面第二个图),而这个位数是要与vs里面选择的对应(下面第三个图),所以想好自己要用哪一个,然后一路用下去,不要换,一换就错。
这里的x86和x64要与OpenCV版本里面的配置的一样,即下面的第三个图

 

这里用的是VS 2015 32位。

 

稍等片刻:

第一次编译完成之后,我们需要将额外的opencv_contrib加到工程中进行第二次编译,在配置表中找到“OPENCV_EXTRA_MODULES_PATH”,设置其参数值为open_contrib源码包中的modles目录。一次之后如果还有红色的块,继续configure,直到全部变白为止。 然后点击Generate,回提示Generate Done。恭喜,完成了一半!!! 

、、

编译完成后,我们在资源管理器下查看上面设置的文件输出目录,发现目录下多出了很多文件,其实就是OpenCV.sln工程文件:

 

三、配置VS生成install

     用VS 2015打开OpenCV.sln工程,在解决方案中可以查看工程目录:

      编译生成debug版本的库,记得在此之前要选择编译的平台信息,这就是编译生成debug版本和release版本的区别,也可以选择release,因为自己的工程可能要用到相应的动态链接库。

我们先对项目进行重新生成解决方案:

等待一段时间,直至生成完毕:

  找到CMakeTargets->INSTALL, 右键选择生成install即可。这样就会在D:\OpenCV3.1\opencv\newbuild下面多出一个install的文件夹,到如果能成功生成,编译就结束了。

等待几分钟:

 然后,在工程目录newbuild下的install目录中,可以看到生成了一堆文件,这堆文件代表着编译完成:

四、配置新的库文件

     重新配置OpenCV,新建一个项目打开,然后配置opencv工程属性:

打开属性管理器:

PS:如果不想每次新建工程又配一次环境的可以参考下 https://blog.csdn.net/sinat_36264666/article/details/77914570

双击图中Microsoft.Cpp.Win32.use前面的扳手图标,进行配置:

设置可执行文件目录:

设置包含目录:

包含以下文件目录:

D:\OpenCV3.1\opencv\newbuild\install\include
D:\OpenCV3.1\opencv\newbuild\install\include\opencv 
D:\OpenCV3.1\opencv\newbuild\install\include\opencv2 

这里原作者的是:下面这个

D:\OpenCV3.1\opencv\newbuild\include
D:\OpenCV3.1\opencv\newbuild\include\opencv 
D:\OpenCV3.1\opencv\newbuild\include\opencv2 

PS:但我在作者的目录下没有找到对应的文件,而是在我上面那个路径下找到了,所以不知道是不是笔误

设置库文件目录:

设置库目录:

然后是附加依赖项:

在里面粘贴如下库文件:

opencv_aruco310d.lib
opencv_bgsegm310d.lib
opencv_bioinspired310d.lib
opencv_calib3d310d.lib
opencv_ccalib310d.lib
opencv_core310d.lib
opencv_datasets310d.lib
opencv_dnn310d.lib
opencv_dpm310d.lib
opencv_face310d.lib
opencv_features2d310d.lib
opencv_flann310d.lib
opencv_fuzzy310d.lib
opencv_highgui310d.lib
opencv_imgcodecs310d.lib
opencv_imgproc310d.lib
opencv_line_descriptor310d.lib
opencv_ml310d.lib
opencv_objdetect310d.lib
opencv_optflow310d.lib
opencv_photo310d.lib
opencv_plot310d.lib
opencv_reg310d.lib
opencv_rgbd310d.lib
opencv_saliency310d.lib
opencv_shape310d.lib
opencv_stereo310d.lib
opencv_stitching310d.lib
opencv_structured_light310d.lib
opencv_superres310d.lib
opencv_surface_matching310d.lib
opencv_text310d.lib
opencv_tracking310d.lib
opencv_ts310d.lib
opencv_video310d.lib
opencv_videoio310d.lib
opencv_videostab310d.lib
opencv_xfeatures2d310d.lib
opencv_ximgproc310d.lib

opencv_xobjdetect310d.lib

opencv_xphoto310d.lib

PS:每个*.lib文件后面的数字对应的是自己安装的版本,如果你安装的不是3.1.0 的版本,记得改过来

最后设置环境变量, 我的编译生成的OpenCV v14/bin的目录如下: 

D:\OpenCV3.1\opencv\newbuild\install\x86\vc14\bin

 

五、代码测试

为了测试扩展模块是否配置成功,我们编写测试代码:

PS:记得将路径改为你自己的,然后看看是否将下面的改为自己的版本

#include <stdio.h>
#include <iostream>
#include "opencv2/core.hpp"
#include "opencv2/features2d.hpp"
#include "opencv2/xfeatures2d.hpp"
#include "opencv2/highgui.hpp"
 
using namespace cv;
using namespace cv::xfeatures2d;
using namespace std;
 
int main( )
{
	Mat img = imread("test3.png", IMREAD_GRAYSCALE);    //这是相对路径,记得改为你自己的
	if (img.empty())
	{
		printf("could not load image...\n");
		return -1;
	}
	namedWindow("原图:", CV_WINDOW_AUTOSIZE);
	imshow("原图:", img);
 
	int minHessian = 400;
	Ptr<SURF> detector = SURF::create(minHessian);
	vector<KeyPoint> keypoints;
	detector->detect(img, keypoints);
 
	Mat img_keypoints;
	drawKeypoints(img, keypoints, img_keypoints, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
	namedWindow("key points", CV_WINDOW_AUTOSIZE);
	imshow("key points", img_keypoints);
 
	waitKey(0);
	return 0;
}

运行代码,结果如下:

记:自己因为一点小错误,配了快一天的环境!!!!!!!

Guess you like

Origin blog.csdn.net/CJ_035/article/details/82024178