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. Listary效率快捷键

    快捷键 打开搜索框快捷键: 双击Ctrl键 上一个项目:向上键 下一个项目:向下键/Tap 打开动作:Enter 属性窗口:Ctrl+O (查询)关键字 作用范围:搜索框 使用方法:命令+空格+关键字 ...

  2. JVM 完整深入解析

    工作之余,想总结一下JVM相关知识.以下内容都是针对于jdk1.7的. Java运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途 ...

  3. centosl7简洁版配置

    生产环境安装了精简版的centos7需要进行相关配置,添加相关组件才能更好的使用! 由于不同的安装方式欠缺的组件不尽相同,本例尽可能满足一般的生产环境的需要!!! 一.安装ifconfig服务 在没有 ...

  4. Spring Cloud是什么鬼?

    研究了一段时间Spring Boot了准备向Spring Cloud进发,公司架构和项目也全面拥抱了Spring Cloud.在使用了一段时间后发现Spring Cloud从技术架构上降低了对大型系统 ...

  5. zookeeper选举算法

    一.ZAB协议三阶段 – 发现(Discovery),即选举Leader过程– 同步(Synchronization),选举出新的Leader后,Follwer或者Observer从Leader同步最 ...

  6. web.xml中配置启动时加载的servlet,load-on-starup

    web.xml中配置启动时加载的servlet,load-on-starup 使用servlet来初始化配置文件数据: 在servlet的配置当中,<load-on-startup>1&l ...

  7. 简单4步,利用Prometheus Operator实现自定义指标监控

    本文来自Rancher Labs 在过去的文章中,我们花了相当大的篇幅来聊关于监控的话题.这是因为当你正在管理Kubernetes集群时,一切都会以极快的速度发生变化.因此有一个工具来监控集群的健康状 ...

  8. 翻译 | 30个 Python3 的最佳实践,技巧和窍门

    1.使用 Python3 如果你关注 Python 的话,应该会知道 Python 2 已经于今年(2020 年)1 月 1 日正式弃用了.这份教程的很多例子都是只支持 Python 3 的,如果你还 ...

  9. 一些php文件函数

    当读入一个巨大的字符串的时候不能使用file_get_contents('文件名') 应该 使用fopen('文件名','r') feof('文件名')  //判断是否读到了文件结尾 ******** ...

  10. 万万没想到,JVM内存区域的面试题也可以问的这么难?

    二.Java内存区域 1.Java内存结构 内存结构 程序计数器 当前线程所执行字节码的行号指示器.若当前方法是native的,那么程序计数器的值就是undefined. 线程私有,Java内存区域中 ...