如何在opencv下使用SIFT
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的更多相关文章
- OPENCV下SIFT算法使用方法笔记
这几天继续在看Lowe大神的SIFT神作,看的眼花手脚抽筋.也是醉了!!!!实在看不下去,来点干货.我们知道opencv下自带SIFT特征检测以及MATCH匹配的库,这些库完全可以让我们进行傻瓜似的操 ...
- 【macOS】 在OpenCV下训练Haar特征分类器
本教程基于以下环境 macOS 10.12.6,OpenCV 3.3.0,python 3.6.由于网上基于masOS系统的教程太少,想出一篇相关教程造福大家-本文旨在学习如何在opencv中基于ha ...
- Chrome出了个小bug:论如何在Chrome下劫持原生只读对象
Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...
- opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较
opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较 参考: http://wenku.baidu.com/link?url=1aDYAJBCrrK-uk2w3sSNai7h52x_ ...
- 如何在Chrome下Debug Mocha的测试
简介 经过前两篇文章的介绍,相信读者对Mocha应该有一定的认知了,本文重点讲述如何在Chrome下Debug Mocha Test, 方便你在测试fail的时候troubleshooting. 关键 ...
- 详细介绍如何在win7下首次实现通过Git bash向Github提交项目
详细介绍如何在win7下首次实现通过Git bash向Github提交项目 引自:http://jingpin.jikexueyuan.com/article/35944.html 作者: wddoe ...
- 如何在IIS7下配置ASP+ACCESS环境
如何在IIS7下配置ASP+ACCESS环境 | 浏览:901 | 更新:2013-01-16 17:46 1 2 3 4 5 6 7 分步阅读 默认装完IIS7之后,使用ASP程序会发现提示数据库连 ...
- 一步一步教你如何在linux下配置apache+tomcat(转)
一步一步教你如何在linux下配置apache+tomcat 一.安装前准备. 1. 所有组件都安装到/usr/local/e789目录下 2. 解压缩命令:tar —vxzf 文件名(. ...
- ActiveX控件的基本操作方法以及如何在VS2010下使用控件
在此,小编就介绍下ActiveX控件的基本操作方法以及如何在VS2010下使用控件,我们以一个程序为例, (1) 打开VS2010编译器(右键以管理员身份运行,因为ActiveX需要注册), ...
随机推荐
- linux yum install
作为一名新手,学习Linux已经一个月了,其间遇到了不少问题,而今天笔者遇到的问题是 #yum install pam-devel #This system is not registered to ...
- Idea利用maven创建web项目,并配置tomcat
参考http://blog.csdn.net/myarrow/article/details/50824793#comments
- tabControl组件的吸顶效果
最开始,还没有使用better-scroll插件的时候,直接在class中设定了一定的position为sticky,设置一定的top达成了效果.但是,使用better-scroll组件后,这些属性就 ...
- JAVA Executor(线程池)框架
一.Executor概述 为更好控制线程,jdk提供一套线程管理框架Executor,帮助开发人员有效地进行线程控制.它们都位于java.util.concurrent包中,是jdk并发包的核心.其中 ...
- swing桌面四子棋程序开发过程中遇到的一些问题记录(二)
第二个遇到的问题是将JButton按钮设置成透明的按钮.首先UI给我一张透明的图片,如果我直接给Button按钮设置背景图片的话,是没有透明的效果的,只会留下白色的底,设置前后的效果如下图 制作透明的 ...
- YuebonCore 2021第一版发布,重构功能菜单模块
YuebonCore 2021.1.6 版本发布了,这是该软件 2021 年的首个版本更新. 对功能菜单模块进行重构,简化功能模块的新增配置,删除了原有的sys_function功能表,,优化sys_ ...
- Elastisearch在kibana下批量处理(mget和bulk)
一.批量查询 有点:能够大大减少网络的请求次数,减少网络开销 1.自定义设置index.type以及document id,进行查询 GET /_mget { "docs":[ { ...
- BPOS关于“相邻库存查询”的调整
"相邻库存查询"的应用场景:主要是实现门店间,相互查看商品库存状况,但出于公司对门店的查看权限控制要求,不能一次性查看到相关店铺的所有库存,所以产生了"相邻库存查询&qu ...
- exchangeNetwork
泛洪(Flooding) 转发(Forwarding) 丢弃(Discarding) 交换机中有一个MAC地址表,里面存放了MAC地址与交换机的映射关系.MAC地址表也称为CAM(Content Ad ...
- [Leetcode刷题]——链表
一.找出两个链表的交点 160.相交链表(easy)2021-01-05 编写一个程序,找到两个单链表相交的起始节点 如下面的两个链表,在c1 处相交: public class Soluti ...