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. idea中Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually.

    我本机安装的mysql版本是5.7的,那么IDEA要连接mysql也应该匹配下驱动版本.把Driver改成MySQL for 5.1就可以了 在点击Test Connection测试下,成功啦!

  2. tomcat能正常启动,但是http://localhost:8080/网页就是打不开,报404

    问题描述: 在IDE中创建了一个新的Servers,并且加入一个Tomcat.然后启动服务,进入浏览器,输入localhost:8080进入,显示错误.服务是可以正常启动的,而且没有任何异常. 问题描 ...

  3. Deep Neural Networks for YouTube Recommendations YouTube的经典推荐框架

    https://zhuanlan.zhihu.com/p/52169807 王喆大佬的讲解

  4. Linux 网络排错检查思路

    Linux 网络排错检查思路 graph TD A[当网络不通时] --> B{ping想要访问的地址,<br>如www.runoob.com} B --> |不通| C{pi ...

  5. hive之Json解析(普通Json和Json数组)

    一.数据准备 现准备原始json数据(test.json)如下: {"movie":"1193","rate":"5", ...

  6. 杭电2734----Quicksum(C++)(数字与字符的关系)

    Quicksum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  7. 2021.Jan.11.Mon

            人生中的机会不会有很多次,把每一次机会都当作最后一次机会,全力以赴地去做好,那么,你就不会永远在等待下一个机会. 看书心得---------By VincentAdamNemessis ...

  8. Label_strange_labels

    空格符号  特殊符号名 注释语句 , align = "left right center" 粗体 斜体 也可能是控制标签 上标 下标 大字号 小字号 下划线 删除线 等宽 键盘输 ...

  9. 知识图谱和neo4j的基本操作

    一.知识图谱的简介 1.知识图谱是什么 知识图谱本质上是语义网络(Semantic Network)的知识库 可以理解为一个关系图网络. 2.什么是图 图(Graph)是由节点(Vertex)和边(E ...

  10. spring ioc踏出第一步

    spring IOC(容器) AOP(面向切面编程) IOC容器:他的功能就是可以整合像 Structs2 .Hibernate.Mybatis: IOC:控制反转:所谓的控制就是控制资源的获取方法, ...