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文件夹ui
CMAKE_BUILD_TYPE里面填RELEASEthis
而后点击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′|┛ 嗷~~
blog