opencv中的SIFT

最近需要使用opencv里的SIFT算法

查了网上的教程,安装了opencv_contrib扩展模块

大致通过如下形式的语句调用:

xfeatures2d::SIFT::create()

但实际使用时发现会报错,将SIFT改成SURF反而成功运行了。

查看opencv_contrib/modules/xfeatures2d/src后发现,里面只有surf.cpp,没有sift.cpp

翻遍网上教程都没找到解决方法,直到怀疑opencv的版本问题

我用的opencv+opencv_contrib都是3.4.15的

在opencv的github上查看了opencv_contrib的Releases

https://github.com/opencv/opencv_contrib
opencv中的SIFT_第1张图片
发现3.4.10以及此前的版本中,opencv_contrib/modules/xfeatures2d/src内都有sift.cpp,从3.4.11后,

opencv_contrib/modules/xfeatures2d/src中的sift.cpp就消失了

opencv中的SIFT_第2张图片

翻看版本变更记录终于发现可能的原因

opencv中的SIFT_第3张图片
在3.4.11的版本变动中,将SIFT移动进了opencv的主体里了

问题解决,下面总结解决方法:

方法1、使用3.4.10及此前版本的opencv+opencv_contrib,采用网上常见的教程调用方法调用SIFT

#include

using namespace cv;

Ptr sift = xfeatures2d::SIFT::create();

方法2、若opencv及opecv_contrib是3.4.11及此后版本,直接在opencv主体调用SIFT即可

#include

using namespace cv;

Ptr sift =SIFT::create();
opencv中的SIFT_第4张图片

实际上区别仅在于:

3.4.10及此前版本中,SIFT在cv::xfeatures2d::SIFT中

3.4.11及此后版本中,SIFT在cv::SIFT中

你可能感兴趣的:(opencv,c++,sift算法)