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
在这里插入图片描述
发现3.4.10以及此前的版本中,opencv_contrib/modules/xfeatures2d/src内都有sift.cpp,从3.4.11后,

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

在这里插入图片描述

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

在这里插入图片描述
在3.4.11的版本变动中,将SIFT移动进了opencv的主体里了

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

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

#include<opencv2/xfeatures2d.hpp>

using namespace cv;

Ptr<Feature2D> sift = xfeatures2d::SIFT::create();

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

#include<opencv2/opencv.hpp>

using namespace cv;

Ptr<Feature2D> sift =SIFT::create();
在这里插入图片描述

实际上区别仅在于:

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

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

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值