SIFT即尺度不变特征变换,是用于图像处理领域的一种描述。这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。
SIFT的尺度不变特征变换在图像特征点匹配中十分关键,因为我们从不同角度拍摄一个物体,物体的尺寸多少都会发生变化。但是在正常情况下我们链接的opencv库里面并没有包含这个算法,需要我们主动重新配置一遍。

使用环境:Ubuntu16_Qt_C++_opencv3.2.0_opencvcontrib3.2.0

1.卸载之前make配置的opencv
 rm -rf /usr/local
/usr/local为之前make文件的默认路径,如果之前有设置为其它路径,则卸载相对应的路径下的文件夹

2.在官网下载opencv和opencv_contrib并解压,注意两者要同一个版本。笔者使用的版本时3.2.0。
笔者在尝试了许多不同版本后,发现3.4以上的版本似乎因为版权原因,在最后成功make并在.pro文件链接上后,虽然能inculde <xfeature2d.hpp>,并且在使用SIFT类使能够自动补全,但是在运行时还是会报错。
报错的具体内容如下:The function/feature is not implemented) This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function ‘cv::xfeatures2d::SIFT::create’。
然后根据其提示,笔者也发现即使CMake时勾选上OPNECV_ENABLE_NONFREE,也还是会报同样的错。最后才发现原来是版本的问题,在选择3.4以前的版本似乎就不会出现这个报错。笔者推测应该是opencv开发人员在更新3.4的版本上在nonfree.hpp加入了一点内容,即如果判断没有版权,则输出这段报错内容,可能可以通过修改一下这个头文件来实现在3.4以上的版本使用SIFT等算法。

3.解压完毕之后,首先是下载一些依赖包,不过在之前配置opencv的时候已经下载过了,所以直接跳过,然后就是通过cmake-gui界面进行make
mkdir build //在opencv3.4的文件夹下新建一个build文件夹
cd build
cmake-gui .. //打开cmake-gui图形界面
source的路径为你的opencv文件夹的路径,build即你新建的build文件夹的路径,填写好后configure,configure界面的选项按默认的来即可

configure之后再添加OPENCV_EXTRA_MOUDULES_PATH的路径,即为你下载的opencv_contrib文件夹里面的moudules文件夹

CMAKE_BUILD_TYPE里面填RELEASE

然后点击generate,成功之后回到命令行界面的build路径下
输入make命令
笔者在make过程中会遇到类似如下报错

翻译过来就是缺少***.i文件,解决方案就是手动将该文件下载,然后放到这个路径下,然后重新输入make命令即可。
具体的.i文件下载需要特殊的方法,可以直接用我已经下载的现成的( ̄▽ ̄)"
链接:https://pan.baidu.com/s/11qltgnkuElInOKGVOr0SAg
提取码:stw1
复制这段内容后打开百度网盘手机App,操作更方便哦!

 另一种类型的报错就是缺少.hpp文件啦,这种错误中缺失的.hpp文件我们可以在本地的硬盘里面找到,然后手动复制粘贴这个.hpp文件。但这里比较特殊,需要在上一级目录即detail文件夹下,新建opencv2文件夹,然后再在opencv2文件夹里新建xfeatures2d文件夹,最后在xfeatures2d文件夹下粘贴cuda.hpp,然后重新输入make命令即可(哈哈,是不是很奇怪,但好像就是这样才行,不要问我是怎么知道的≡(▔﹏▔)≡)

解决了上面两种报错的类型,基本上就可以make成功了

4.make成功后你可以在/usr/local目录下看到成功下载的文件,然后就是在Qt链接你成功下载的文件啦。具体就是新建项目,在.pro文件最后添加如下文本
INCLUDEPATH += /usr/local/include \
               /usr/local/include/opencv \
               /usr/local/include/opencv2

LIBS += /usr/local/lib/lib*
5.然后就可以使用SIFT等类啦┗|`O′|┛ 嗷~~

如何在opencv下使用SIFT的更多相关文章

  1. OPENCV下SIFT算法使用方法笔记

    这几天继续在看Lowe大神的SIFT神作,看的眼花手脚抽筋.也是醉了!!!!实在看不下去,来点干货.我们知道opencv下自带SIFT特征检测以及MATCH匹配的库,这些库完全可以让我们进行傻瓜似的操 ...

  2. 【macOS】 在OpenCV下训练Haar特征分类器

    本教程基于以下环境 macOS 10.12.6,OpenCV 3.3.0,python 3.6.由于网上基于masOS系统的教程太少,想出一篇相关教程造福大家-本文旨在学习如何在opencv中基于ha ...

  3. Chrome出了个小bug:论如何在Chrome下劫持原生只读对象

    Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...

  4. opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较

    opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较 参考: http://wenku.baidu.com/link?url=1aDYAJBCrrK-uk2w3sSNai7h52x_ ...

  5. 如何在Chrome下Debug Mocha的测试

    简介 经过前两篇文章的介绍,相信读者对Mocha应该有一定的认知了,本文重点讲述如何在Chrome下Debug Mocha Test, 方便你在测试fail的时候troubleshooting. 关键 ...

  6. 详细介绍如何在win7下首次实现通过Git bash向Github提交项目

    详细介绍如何在win7下首次实现通过Git bash向Github提交项目 引自:http://jingpin.jikexueyuan.com/article/35944.html 作者: wddoe ...

  7. 如何在IIS7下配置ASP+ACCESS环境

    如何在IIS7下配置ASP+ACCESS环境 | 浏览:901 | 更新:2013-01-16 17:46 1 2 3 4 5 6 7 分步阅读 默认装完IIS7之后,使用ASP程序会发现提示数据库连 ...

  8. 一步一步教你如何在linux下配置apache+tomcat(转)

    一步一步教你如何在linux下配置apache+tomcat   一.安装前准备. 1.   所有组件都安装到/usr/local/e789目录下 2.   解压缩命令:tar —vxzf 文件名(. ...

  9. ActiveX控件的基本操作方法以及如何在VS2010下使用控件

    在此,小编就介绍下ActiveX控件的基本操作方法以及如何在VS2010下使用控件,我们以一个程序为例, (1)      打开VS2010编译器(右键以管理员身份运行,因为ActiveX需要注册), ...

随机推荐

  1. select * from 多张表的用法

    select * from 多张表的用法   其实就是 inner join   select * from Class c,Student s where c.ClassID=s.ClassID   ...

  2. 166个最常用的Linux命令,哪些你还不知道?

    linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心.     线上查 ...

  3. git pull 和git fetch的区别

    git pull 是上下文环境敏感的,它会把所有的提交自动给你合并到当前分支当中,没有复查的过程 而git fetch只是把拉去的提交存储到本地仓库中,真正合并到主分支中需要使用merage head ...

  4. java异常相关说明(printStackTrace,fillInStackTrace等)

    我们在实际场景中很容易catch(Exception e) 简单粗暴 这样写代码有几个问题 1.你无法细分具体异常 因为有时需要针对不同异常 产生不同的应对行为 2.直接exception 往往不会包 ...

  5. Github美化 添加徽章

    Github美化 添加徽章 0. 前言 1. 准备 2. 开始 a. 打开shields.io b.制作静态徽章 c.制作动态徽章 d. 结果 3.额外 0. 前言 之前看见很多大项目都有很多勋章,比 ...

  6. WPF时间长度自定义选择控件TimeSpanBox

    以下控件采用https://www.cnblogs.com/cssmystyle/archive/2011/01/17/1937361.html部分代码 以下控件采用https://www.cnblo ...

  7. Java基础学习总结笔记

    Java基础 Java常用内存区域 栈内存空间:存储引用堆内存空间的地址 堆内存空间:保存每个对象的具体属性内容 全局数据区:保存static类型的属性 全局代码区:保存所有的方法定义 修饰符 权限修 ...

  8. 诸葛 VS 庞统,拿下 Paxos 共识算法

    前言 分布式确实是一个有趣的话题,只要你留心观察,分布式在生活中无处不在. 悟空哥最开始学习分布式是从一篇非常用心写的技术征文开始的,而且这篇文章获得了征文第一名,在此感谢掘金社区提供的平台.想学习的 ...

  9. 修改hosts文件后不生效,该怎么办

    对于web开发来说,经常需要修改hosts文件,用来将域名与ip对应匹配.但是有时候发现hosts文件明明已经改了,但就是不生效,页面还会跳到某个丧心病狂的私人小站.hosts文件不生效有很多种原因, ...

  10. 【ORA】ORA-19602: cannot backup or copy active file in NOARCHIVELOG mode

    ORA-19602: cannot backup or copy active file in NOARCHIVELOG mode 这个问题是rman备份的时候,发现有问题 原因: 数据库没有开启归档 ...