【opencv厨神成长记】opencv+opencv-contrib完整编译流程

转载请注明出处 https://blog.csdn.net/woshiNLW/article/details/88569916

opencv-contrib,你还要我怎样


本文摘要:

  • opencv全套编译所需材料;
  • windows系统中,opencv的C++API版本的全套编译;

正文:

  • windows系统配置opencv+opencv-contrib环境 ,配合Visual Studio更清爽!
    楼主这里就以我自己选取的“食材”为例,其他“食材”大致相似
    注意: 请保持网络畅通!!!

  • "食材"预备: (正所谓巧妇难为无米之炊,点击下载我打包的:全套,提取码:e1xi)

食材名食材销售地址食材的作用
GitGitGithub上获取相关库的源码
CMakecmake编译所使用的工具
opencvopencvopencv“主食材” ,主要功能
opencv-contribopencv-contribopencv"调味料" ,包含一些额外的功能
VisualStudio微软官网从微软官网获取VisualStudio2017社区版
  • ”食材“加工:(这里将一步一步介绍获取食材的流程)

    1. 下载git:
      根据自己电脑的位数来选择下载的版本
    2. 下载CMake
      在这里插入图片描述
    3. 从Github上获取opencvopencv-contrib的源码
      ** 注意 ** opencv以及opencv-contrib的源码的版本要尽量保持一致,要么都通过git clone获取,要么就都获取相同的版本,楼主使用的是opencv4.0.1和opencv_contrib4.0.1,当然你也可以下载其他对应相同版本的,避免不必要的编译错误
      1).首先选择你要保存的文件的位置,取名opencv-source,如我的:
      在这里插入图片描述
      2).进入opencvopencv-contrib的页面
      这里有两种方式下载源码,** 第一种 ** ,能够保证你获取最新的源码,按照图示步骤先获取github上的url,使用Git通过 git cone [url],获取git url然后通过Git,在想要保存文件路径下,右击鼠标,Git Bash Here,就会出现Git的控制台窗口,输入 git clone https://github.com/opencv/opencv.git 在按Enter键即可等待它自己下载,git clonedownload对于opencv-contrib的下载也可参照上面流程,只不过对应的git的url是opencv-contrib的,同样重新在opencv-source鼠标右击,Git Bash Here,,然后输入:git clone https://github.com/opencv/opencv_contrib.git 敲回车等待下载完成即可
      ** 第二种 ** 方式获取源码,这个就比较直观,可以选择比较稳定的版本,楼主选择的是opencv4.0.1,按照图示获取对应的压缩包文件直接下载到opencv-source路径中:release压缩包release在这里插入图片描述
    4. 有时候可能需要使用到Eigen库做矩阵,矢量等运算,当然h是获取最新的库了,保存在opencv-source路径中:eigen
  • "开火做饭":(火烧热了,就该下各种“食材”了)

    注意: 其实,到了这里,才是真个编译过程的核心流程,一定要一步一步的看仔细了,每一步是干什么用的,我在下面都会解释到:
    1.启动CMake gui,选择要编译的源码以及编译后保存的二进制代码的位置,我们这里在opencv-source下面新建一个build用来保存编译后的二进制文件,这里是我的目录的结构:
    cmakepath1).接下来就是使用CMake进行第一步,这个过程一般2分钟:
    configure1configure22).上一步结束之后,会出现很多的红色,这里需要我们对指定的文件进行勾选以及配置,这就是我们这一步需要解决的问题:
    eigenpathextrapathworldnonfree3).经过上一步之后,我们必须的东都选择完了,其实有些文件不需要build,我们就可以取消他的勾选,如果有些选哟,我们就选择勾选,
    比如可以勾选的一些:
    install-c-examples(编译c的样例程序);build-docs(会编译生成帮助文档)等等
    一些不必要勾选的:
    with-VTK;with1394;with-CUDA(如果我们不需要进行GPU加速的话);还有关于python和java的一些选项等
    configure3上面再次点击configure时,就会对之前的一些选项进行配置,并自动从网络上面下载所需要的文件,这个过程大概需要3-5分钟左右
    configure4上面基本上是最后一次点击Confugure进行配置了,大约需要5-10分钟
    generate上面Generate的时间就很快了
    open完成上面的步骤之后,我们可以通过Cmake下面的小窗(就是最下面的窗口,把它网上托大些,就可以滚动里面的内容查看),查看我们选择了哪些功能。
    然后打开工程,等着用编译器生成适用我们电脑环境的库

  • “大火收汁”(到了这一步,就是编译器该做的事情了,我这里是VisualStudio2017)

    1.下面就是生成二进制文件过程了:debug先生成debug类型的文件,这个时间有些长,15-25分钟左右,好电脑可能几分钟就完事
    release在选择release版本进行生成二进制文件,和上面时间差不多

  • “出锅试菜”(到了这一步,丑媳妇怎么找也得见公婆)
    1.首先,先确定我们有没有做成“菜”,而不是煮了一锅水到最后烧干了。
    installfilesxfeatures2d2.经过上面的查看,证明我们的确做出来了“菜”,但是好吃不好吃,还得看接来的环境配置以及测试才行;
    1).将install->x64->vc15->bin的路径添加到系统的环境变量中,下面是详细步骤:
    binpathhpeizhihuanjingbianliang2).新建一个工程,将头文件和库函数交代清楚,include进来,这里可以通过属性管理器窗口进行配置(推荐,比较一劳永逸):在这里插入图片描述includelib在这里插入图片描述如果想配置release版本的属性表,只需要在属性管理器中,在Release|X64下新建属性表,重复后面步骤,只是在 输入附加依赖库填入不带d的opencv_world,别忘带分号。
    这一步环境配置就全部结束了!
    3).“试菜”:(先来一个试菜员试试菜能不能吃)match看来费了这么久炒出来的菜,味道还不错,后面就尽情开吃吧!
    附代码:

// 代码
#include<opencv2/opencv.hpp>
#include<opencv2/xfeatures2d/nonfree.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
	Mat image_1 = imread("E:/Programs/OpenCV/images/1.jpg", 1);    //右图
	Mat image_2 = imread("E:/Programs/OpenCV/images/2.jpg", 1);    //左图
	
	//灰度图转换  
	Mat grayImg_1, grayImg_2;
	cvtColor(image_1, grayImg_1, COLOR_RGB2GRAY);
	cvtColor(image_2, grayImg_2, COLOR_RGB2GRAY);
	
	//提取特征点    
	Ptr<<xfeatures2d::SurfFeatureDetector>> surfDetector = xfeatures2d::SURF::create(1000);
	vector<KeyPoint> keyPoint1, keyPoint2;
	surfDetector->detect(grayImg_1, keyPoint1);
	surfDetector->detect(grayImg_2, keyPoint2);

	//特征点描述,为下边的特征点匹配做准备    
	Ptr<<xfeatures2d::SurfDescriptorExtractor>> SurfDescriptor = xfeatures2d::SURF::create();
	//SurfDescriptorExtractor SurfDescriptor;
	Mat imageDesc1, imageDesc2;
	SurfDescriptor->compute(grayImg_1, keyPoint1, imageDesc1);
	SurfDescriptor->compute(grayImg_2, keyPoint2, imageDesc2);

	//获得匹配特征点,并提取最优配对     
	FlannBasedMatcher matcher;
	vector<DMatch> matchePoints;

	matcher.match(imageDesc1, imageDesc2, matchePoints, Mat());
	cout << "匹配点总计: " << matchePoints.size() << endl;

	Mat img_match;
	drawMatches(image_1, keyPoint1, image_2, keyPoint2, matchePoints, img_match);
	namedWindow("match", 0);
	imshow("match", img_match);

	waitKey(0);
	return 0;
}

文末:
后面我会多发一些opencv,图像处理方面的文章,如果觉得还可以就关注我一波,有什么问题就在下方评论,我都会尽量尝试着去帮助你解决问题!
如若转发,请征得楼主的同意!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值