本人配置的是vs++2013(64位)+opencv3.1.0+contrib3.1.0
1:配置所需的文件:
opencv3.1.0:下载方式可以从官网:点击打开链接 此时解压安装得到两个文件夹build 和source,其中source才是后面我们需要的,build是已编译的没有用,我们得重新编译。
也可以从GitHub中下载对应的版本opencv源码:点击打开链接 这里下载只要源码source,可以自己建个build文件,将编译后的文件放到build中,亲测建议在GitHub中下载源码。(我是采用第二种方式在GitHub中下载的)
contrib3.1.0:也是在GitHub中下载:点击打开链接 注意:在GitHub中下载的时候要输入需要的版本,然后再下载
如下图所示:
cmake:点击打开链接
cmake编译器下载版本没有要求,一般只要高于3.1就行,我这里编译的是用3.6.0(但是要下载64位,因为我配置的是64位的),下载后解压,点开bin文件夹,点击cmake-gui-exe就是编译的界面了。如下图:
打开cmake,有两个地方,1:是放下载的opencv3.1.0的源码source,2:是编译后放置的文件夹build
vs++2013:这个下载安装我就不用说了
2:cmake 编译
a:在cmake界面1和2处分别放入对于的文件路径:如上图就不重复了
b:点击configure,此时会有大概10分钟中,这个完全看网速,如果发现失败提示,则是因为网速太慢下载一些文件终端导致编译失败,可以重复多次,直到成功为止。如果实在不行就直接下载所需文件到指定文件夹中(cmake中主要需要的是IPP以及ffmpeg的一些东西。如果下载速度较慢或者下载完成后MD5校验错误的话,需要重新在别处下载。IPP可以在http://sourceforge.net/projects/opencvlibrary/files/3rdparty/ippicv/下载。注意是windows_20141027的版本。而ffmpeg我是直接使用CMake下载的,因而就不提供第三方的下载地址了。这些包最后都应该放到D:\opencv-3.0.0\3rdparty底下对应的目录,最好的方法是先让CMake下一小会儿,然后直接将完整的文件到对应的目录下进行替换)
c:如果有configure done!表示编译成功,则进行下一步,编译扩展模块contrib3.1.0,
在search中搜索OPENCV_EXTERA_MODULES_PATH,则会选中此目录,然后再后面的value中添加你自己解压contrib的文件路径中的modules路径,如*********\opencv_contrib\modules.完成之后点击左下角的configure进行第二次编译,这次编译比较快,显示比较快,显示configure成功后,再点击generate,如果成功则会发现在原来自己建的编译文件夹build中多了很多文件。至此cmake编译结束
3:vs++2013中编译
a:打开build文件中找到OpenCV.sln打开,则进入vs++环境中,因为我是编译debug64位,则选择对应的位数和debug或者release。然后选择重新生成解决方案。这个过程会有大概帮个小时左右。我当时是编译成功100多个,失败了3个,但后来发现并不影响。
b:找到CMakeTargets中的INSTALL,然后右键选择“仅限于项目”————“仅生成INSTALL(B),完成之后会在build文件夹中发现install文件夹,至此编译完成。
4:配置环境
a:用户环境变量——找到path点击——编辑——新建——将D:\opencv-3.0.0\build\install\x64\v12\bin
这里面的x64表示64位,v12表示vs++2013
b: 系统环境变量同上操作
5:配置vs++2013——opencv工程属性,
a:新建一个工程,这里就不讲了
b:首先选择debug64位,没有就新建x64,则在属性管理器发现debug64,右键——添加新项目属性边(避免后面每次都配置工程属性,以后就每次直接添加属性表即可)——起个名字opencv_debug, 则会在前一步建的工程中多了一个属性边opencv_debug.pros. 如下图:
新建工程属性表后如下:
如果下次再新建工程:则只需要debug64右键添加现有属性表opencv_debug.pops即可,就不用每次配置
c:右键opencv_debug.pops——属性——进行配置
可执行文件目录:D:\opencv3\build\install\x64\vc12\bin
包含目录:
D:\opencv3\build\install\include
D:\opencv3\build\install\include\opencv
D:\opencv3\build\install\include\opencv2
库文件目录:D:\opencv3\build\install\x64\vc12\lib
库文件目录:D:\opencv3\build\install\x64\vc12\
D:\opencv3\build\install\x64\vc12\staticlib
添加附加依赖项:(我这里由于是配置的debug库,所以310后面都有一个d,如果配置的是release库则没有d。其中310表示opencv3.1.0版本,必须版本一致,否则后面程序运行将无法打开这些lib)
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
ippicvmt.lib
至此配置完成!
6:配置环境中常见的错误:
a:调试时出现无法找到opencv_****.dll
解决办法:将opencv3\build\x64\vc12\bin中的所有******.dll的文件复制到C:\Windows\SysWOW64 (64位) 和C:\Windows\System32 (32位)最好全部都复制过去。
7:contrib库配置完代码测试:SIFT算法
#include <iostream>
#include <opencv2/opencv.hpp> //头文件
#include <opencv2/xfeatures2d.hpp>
using namespace cv; //包含cv命名空间
using namespace std;
int main()
{
//Create SIFT class pointer
Ptr<Feature2D> f2d = xfeatures2d::SIFT::create();
//读入图片
Mat img_1 = imread("**********\\1.jpg");
Mat img_2 = imread("***********\\2.jpg");
resize(img_1, img_1, Size(400, 500), (0, 0), (0, 0), INTER_LINEAR);
resize(img_2, img_2, Size(400, 500), (0, 0), (0, 0), INTER_LINEAR);
//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(0);
}
效果图如下:
更多细节详情:https://www.cnblogs.com/jliangqiu2016/p/5597501.html
http://blog.csdn.net/github_28833431/article/details/48226291