opencv3.4.6 vs2017 win10 配置contrib库 教程

从opencv3开始,将sift、surf等函数相关的库单独拎出来了,若要使用需配置contrib包。本文介绍了如何在vs2017中配置contrib+opencv。所用版本为opencv3.4.6+contrib3.4.6,操作系统为win10,vs2017 community。

配置contrib前我已完整配置过opencv,如果已配置过opencv,在设置路径相关参数时,需要注意调整一下。默认已装好vs。

1 下载各种东西

从最大的同性交友网站上下载opencv和opencv_contrib。均为官方发布的。
opencv: https://github.com/opencv/opencv
opencv_contrib: https://github.com/opencv/opencv_contrib

注意: 进入网页后,点击中间的releases,找到对应版本下载。建议两个版本配套下载,我下载的均为3.4.6版本。

可能遇到的问题: 迅雷下载不下来。
解决办法: 关掉迅雷,网页下载即可,或者用git的工具。

cmake编译器: https://cmake.org/download/
用于编译opencv和contrib工程。下载完后双击安装,全都用默认选项即可。安装完成后桌面上会出现名为CMake (cmake-gui)的快捷方式。
就长这样

2 弄个文件夹放一起吧

将下载到的opencv文件解压。在E盘(软件安装盘)目录下新建一个文件夹my_opencv,将解压后的opencv和contrib文件夹放进去。再在my_opencv中新建一个空文件夹build,用于存放过会生成的文件。如图所示。
目录

3 编译

打开cmake,第一行目录定位到刚才那个新建的文件夹下的opencv文件夹中的sources中。第二行定位到刚才新建的build文件夹。之后点configure,点击后在第一行选择对应你的环境的选项。如我的是64位的vs2017,我就选择Visual Studio 15 2017 Win64。点击finish。
在这里插入图片描述

configure后开始编译opencv3.4.6的源代码,输出至build文件夹。这步配置如图所示。
配置目录
点击configure后,他会开始编译,这步需要较长的时间(约20分钟?记不清了)。编译结束后,configure上面那个框会红一片,没事,再点一次configure,再等一会,就全白了。

之后在configure上面那个框中,找到BUILD_opencv_world选项,打钩,这样之后就可以用一个opencv_world的lib代替所有lib了。
然后找到OEPNCV_EXTRA_MODULES_PATH选项,点一下该选项右边空白处,定位到之前的contrib文件夹里的modules文件夹。这步如图所示。(做这步的时候背景应该是白色的,我就不重新编译改颜色了)
contrib路径
至于这行上面那个OPENCV_ENABLE_NOFREE选项,有人说勾有人说不用,保险起见我还是勾上了。

配置好上述两个选项后,再点一次configure,对没错你还是要等好久。等他done之后又是一片红,对没事再点一次configure,好了白了,编译完了。

高亮提醒!!!:在编译过程中(你的普通网络有些文件不能直接下载!!) 如果你用的是普通网络,会在下载过程中等更久的时间(有一些文件会一直等待传输直到超时失败)。

网上的解决方法: 在第一次configure后,打开my_opencv\build目录下的CMakeDownloadLog.txt文件中查找缺失的文件,再去网上单独下载,放到对应目录中。
我的操作体验: 相比我用别的网络下载的那台电脑的结果所示,他少下载的文件似乎并没有全在log日志里通过miss的方式告诉我。这步没有仔细研究,我也不知道少了那些文件影响大不大。
我用的解决方法: 刚点击发布博客的时候发现csdn提示我不让我说,就把这段涉及的相关内容改隐晦了一些。

4 生成

(1)进入之前创建的my_opencv中的build文件夹,可以看到这里面多了一堆东西。点击OpenCV.sln,打开工程,确认上面工具栏中间的选项是Debug,x64。右键解决方案,点重新生成工程。
在这里插入图片描述
这步就又要花很多时间了…20~30分钟,吃个饭去吧。

之前都做对的话这步应该不会报错,等他done之后能看到成功生成了xxx个,错误0个,忽略了x个。

(2)之后在解决方案管理器中,找到CMakeTargets文件夹中的INSTALL,右键,选择“仅生成项目”->“仅用于INSTALL”。
在这里插入图片描述
这步贼快,喝口水就好了。

至此contrib就配好了。可以通过新建项目使用了!当然了你还得重新配一下项目的环境,和opencv一样的。

5 连接器和包含目录配置

新建项目。点击视图->其他窗口->属性管理器,打开后右键项目属性。配置均链接到刚才生成的build文件夹下install文件夹中的文件,打开install后会发现和普通配置opencv的文件夹基本一样。
VC++目录->包含目录:

 E:\my_opencv\build\install\include
 E:\my_opencv\build\install\include\opencv
 E:\my_opencv\build\install\include\opencv2

VC++目录->库目录:

 E:\my_opencv\build\install\x64\vc15\lib

连接器->输入->附加依赖项:

opencv_world346d.lib

右键计算机,高级系统设置->环境变量,下面那个框框找到PATH,增加:

E:\my_opencv\build\install\x64\vc15\bin

配好了。如果不放心就重启一下电脑吧。

6 测试

打开刚才新建的工程,进行测试。确保上面工具栏中间是DEBUG,x64。就可以运行了!

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

using namespace cv;
using namespace cv::xfeatures2d;
using namespace std;

int main(int argc, char** argv) {
    Mat src = imread("C:\\Users\\xzh\\Desktop\\1.jpg", IMREAD_GRAYSCALE);
    if (src.empty()) {
        printf("could not load image...\n");
        return -1;
    }
    namedWindow("input image", CV_WINDOW_AUTOSIZE);
    imshow("input image", src);

    // SIFT特征点检测
    int minHessian = 100;
    Ptr<SIFT> detector = SIFT::create(minHessian);//和surf的区别:只是SURF→SIFT
    vector<KeyPoint> keypoints;
    detector->detect(src, keypoints, Mat());//找出关键点

    // 绘制关键点
    Mat keypoint_img;
    drawKeypoints(src, keypoints, keypoint_img, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
    imshow("KeyPoints Image", keypoint_img);

    waitKey(0);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/GregoryHanson/article/details/94772318