1 tortoisegit www.tortoisegit.org(可选)
2 CMake是一个跨平台的安装(编译)工具,能够用简单的语句来描述全部平台的安装(编译过程)。他可以输出各类各样的makefile或者project文件
2、最新代码的下载(OpenCV和Contribute分别下载)
Http直接下载
或者经过git下载
或者能够经过"码云“转一下,也就是"码云“在后台把代码从github上背过来,咱们直接从"码云“上下载就能够。
下载的结果解压后放在一块儿
3、代码的make
Cmake将原始代码make成为你选择的编译器可以编译的形式,最新版本的cmake已是3.12.2了。
主要流程为两次Configure->一次Generate->Open Project打开vs进行编译。参数的不一样带来告终果的不一样。其中注意如下几点
一、
64位和32位的选择体如今选择编译器的时候是否选择Win64。我认为通常意义上说,32位的程序能够以兼容模式运行在64位机器上,反过来不能够。那么也就是说32位以效能换取兼容性。
使用时根据实际状况选择。建议新手从32位开始
若是确认使用2017,则选择它
二、
静态库和动态库的选择体如今是否选择BUILD_SHARED_LIBS(默认是选中的)。若是选择静态库,那么最后生成的程序和支持库是打包到一块儿的,交付起来比较方便;若是是动态库则是分开的。效能问题没有研究过。新上手的选择
默认动态库
。同时建议将BUILD_opencv_world选中,这样最后的结果是一个文件。
这个过程当中,会下载较多东西,统一下载在.cache文件夹中
这里,值得注意的一点是,选择的项目,能够经过搜索的方式进行加速,好比我在cmake中输入"worl",将自动导航到"BUILD_opencv_world"条目中来。ios
这个地方,须要多说一句,CMAKE这个地方是最容易出现问题的地方,一方面是由于CMAKE这里的信息不少,你们有可能会感到没法适应;一方面是由于CMAKE你们接触的比较少,不是很熟悉;再加上CMAKE的过程当中,有时须要再从网络上下载一些东西,若是网络很差的话,也会致使失败。在前期的视频中,我总结的具体方法为:"两次Config,一次Generate"这里加以补充:
a、Config的目的主要是让你对CMAKE里面的相关内容进行选择的,第一次Config是把全部须要配置的项目显示出来,而后你进行修改(就是打钩子和去掉钩子),第二次config是为了配置你修改后的内容
全部红色的内容都是能够修改的
b、须要关注的地方,是下面,最好不要有红色,至少不要有error
c、generate就是生成能够被编译器编译的项目,这样咱们打开vs2017就能够直接编译了
三、最为重要的,也是和普通OpenCV代码编译不一样的地方。其中OPENCV_EXTRA_MODULES_PATH 中要填入contrib-master下的modules目录
特别是这个地方,要将OPENCV_ENABLE_NONFREE打开!!!
编译生成的结果,可以不飘红就能够。
肯定,两次config,一次generate
4、代码的编译
打开vs环境,选中
批生成,生成install便可,其它的会自动调用(我很是推荐这样作,由于通过实验,这样最省时间,并且达到效果)
根据机器性能,等待不一样的时间
比较吃CPU
若是出现这个错误(我出现了这个错误)
应该是HDF5的问题,因此回过去将其去掉。
按照我这个方法,最后可以直接成功的。
那么最终生成的文件在哪里?实际上是在install中的
能够看到,已经按照容易使用的方式排列好了
这张图可以帮助看得更清楚:
咱们最后须要的,显然是.dll文件,它被放置在bin/release目录下面
此外,咱们还能够经过比较得到一些信息(左边是不带contrib的,右边是带contrib的)
能够看到,不管是lib的大小,仍是include中文件的数量,contrib都要大一些。
这个角度也是能够看到的。
5、在新项目中使用OpenCV
将须要的东西放到一块儿
动态库模式:
在VC++目录中设定"包含目录"为include地址;"库目录"为提供的lib地址。注意这里的lib地址只是提供了接口信息。
将dll文件拷贝到PATH目录可以指向的地方,好比"C:\Windows\System",
这个具体的位置只和编译的时候相关,因此多试几回就会找到,通常来讲都是system里面
设置lib(注意填全,不只仅是opencv_word,注意后面.lib也要写)
注意,须要将"代码生成"的"运行库"改成"多线程调试"。这样就将MFC本身的支持库包含在最后生成的exe中了。
若是想要在程序设计的过程当中,可以直接修改OpenCV本身的代码,添加相关功能,首先将Opencv项目引入
然后添加引用设置项目依赖,就能够直接在项目中修改OpenCV的代码,生成符合本身要求的专用类库。更能够经过Pull/request的方法直接申请提交。
最后,编写代码的时候,头文件和命名空间要选择正确,由于咱们实现的是shift,因此须要作一个shift操做:
目前从结果来看
// opencvtest.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
#
include "pch.h"
#
include <iostream>
#
include <opencv2/core/utility.hpp>
#
include "opencv2/video/tracking.hpp"
#
include "opencv2/imgproc.hpp"
#
include "opencv2/videoio.hpp"
#
include "opencv2/highgui.hpp"
#
include "opencv2/xfeatures2d.hpp"
#
include <iostream>
#
include <ctype.h>
using
namespace cv;
using
namespace std;
using
namespace xfeatures2d;
int main()
{
Mat matSrc = imread("e:/template/lena.jpg");
Mat gray;
Mat draw;
cvtColor(matSrc, gray, COLOR_BGR2GRAY);
Mat descriptors;
std::vector<KeyPoint> keypoints;
// 生产sift结构
Ptr<SiftFeatureDetector> siftFD = SiftFeatureDetector::create();
siftFD->detectAndCompute(gray, Mat(), keypoints, draw);
drawKeypoints(gray, keypoints, gray, Scalar(0, 0, 255), DrawMatchesFlags::DEFAULT);
imshow("gray", gray);
waitKey(0);
return 0 ;
}
若是配置错误,opencv会有本身的显示
感谢阅读至此,但愿有所帮助!