Windows环境下vs2015+opencv3.1+contrib库安装配置

准备:

1. opencv最新的版本是3.10,可以到官网下载http://opencv.org/。官网下载提取后会得到两个文件夹:build和sources。我们需要用到的是sources,用CMake重新编译sources里的内容,再添加contrib库。build里的内容是官网已经编译好的,有其他博客是讲利用build安装的,而这里我们并未用到。opencv也可从GitHub下载https://github.com/opencv/opencv,这是源码,相当于前述的sources文件夹。

2. CMake是用来编译源码的,官网下载https://cmake.org/。我使用的是。使用CMake除了要opencv编译源码,还有一个原因是:opencv3.1版本只能调试x64,不能调试x86。也就是说要在32位环境下调试,需要自己用CMake重新编译源码。

3. contrib库。官网上的opencv3.1包含的是稳定的核心库,而一些不稳定的放到了contrib中。GitHub下载https://github.com/opencv/opencv_contrib。解压后,我们用到的是modules文件夹。

4. 看见文件里有解压包时,不要轻易打开。

开始:

1. 文件夹路径,这个随自己设置就行。我将准备内容里的东西都放在了D:\BUILD(以下都用#\代替)里,新建一个myopencv文件夹,来装经CMake编译后的内容,会得到如下图的形式:

2. 在CMake编译opencv源码时,需要下载几个文件,但一般很难下载而导致编译失败,所以直接将其拷到文件夹中。链接:http://pan.baidu.com/s/1c18V9Ck 密码:bt7z。将downloads里三个文件夹中的文件拷贝到#\opencv\sources\3rdparty\ffmpeg下,会得到如下图的形式:

将ippicv_win文件夹拷贝到#\opencv\sources\3rdparty\ippicv下,同时修改downloader.cmake,以记事本形式打开,删掉末尾的“_icv_downloader()”

3. 在#\CMake\bin下打开cmake-gui.exe。在where is the source code输入 #\opencv\sources,在where to build the binaries输入 #\myopencv。会得到如下图的形式:


然后点击Configure,会出现编译器选择对话框

选择Visual Studio 14 2015,这个编译之后opencv3.1就能在x86(win32)环境下调试了。Visual Studio 14 2015 Win64对应的是x64。然后就是等待出现Configuring done,如下图。

然后Search找到OPENCV_EXTRA_MODULES_PATH,输入#\opencv_contrib_master\modules。再次点击Configure,等出现Configuring done后,点击Generate,之后会出现Generating done。到此为止编译的工作已经完成了。

4. 在#\myopencv下找到OpenCV.sln文件,打开它。初始化之后右键 解决方案‘OpenCV’,选择重新生成解决方案。这是在Debug、win32环境下生成的。此过程时间较长。然后找到CMakeTargets文件夹下的INSTALL文件,如下图:

 

右键->仅用于项目->仅生成INSTALL。然后在#\myopencv下就会有一个install文件夹。

5. 配置环境变量。

    环境变量设置。变量名:OPENCV;值:#\myopencv\install。

    用户变量设置。path下添加:#\myopencv\install\x86\vc14\bin。

6. 打开vs2015,新建一个工程。在属性管理器里找到Microsoft.Cpp.Win32.uesr,如下图:

右键->属性,会弹出对话框。找到通用属性->VC++目录,如下图:

在包含目录里添加:

#\myopencv\install\include

#\myopencv\install\include\opencv

#\myopencv\install\include\opencv2

在库目录里添加:

#\myopencv\install\x86\vc14\lib

找到链接器->输入->附加依赖项,如下图:

在附加依赖项中添加内容(就是#\myopencv\install\x86\vc14\lib文件夹里面的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_phase_unwrapping310d.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

至此,已经完成了所有工作。

测试:

重启电脑,验证一下是否已经OK。下面给出两个代码:

1. 第一个是显示一幅图像。将图像放到所建的工程里

复制代码
#include <iostream>  
#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  

using namespace cv;

int main() {
    // 读入一张图片(游戏原画)    
    Mat img = imread("灯.jpg");
    // 创建一个名为 "游戏原画"窗口    
    namedWindow("游戏原画");
    // 在窗口中显示游戏原画    
    imshow("游戏原画", img);
    // 等待6000 ms后窗口自动关闭    
    waitKey(6000);
}
复制代码

显示结果为:

2. SIFT算法

复制代码
#include <iostream>
#include <opencv2/opencv.hpp>  
#include <opencv2/xfeatures2d.hpp>
using namespace cv;  
using namespace std;

int main()
{
    //Create SIFT class pointer
    Ptr<Feature2D> f2d = xfeatures2d::SIFT::create();
    //读入图片
    Mat img_1 = imread("4.jpg");
    Mat img_2 = imread("5.jpg");
    //Detect the keypoints
    vector<KeyPoint> keypoints_1, keypoints_2;
    f2d->detect(img_1, keypoints_1);
    f2d->detect(img_2, keypoints_2);
    //Calculate descriptors (feature vectors)
    Mat descriptors_1, descriptors_2;
    f2d->compute(img_1, keypoints_1, descriptors_1);
    f2d->compute(img_2, keypoints_2, descriptors_2);
    //Matching descriptor vector using BFMatcher
    BFMatcher matcher;
    vector<DMatch> matches;
    matcher.match(descriptors_1, descriptors_2, matches);
    //绘制匹配出的关键点
    Mat img_matches;
    drawMatches(img_1, keypoints_1, img_2, keypoints_2, matches, img_matches);
    imshow("【match图】", img_matches);
    //等待任意按键按下
    waitKey(600000);
}
复制代码

显示结果为:

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值