转自:https://blog.csdn.net/Gordon_Wei/article/details/88920411

opencv4.0.1 的编译完成版本已经没有SIFT和SURF算法了, 一些算法因为专利或者未成熟的原因,不在发布的release版本中了,其中就包括SIFT和SURF,他们因为专利的原因不能用于商业,在2.x版本中,放在在nofree中,而3.x版本开始,这些方法被放入了opencv_contrib中,如果想使用需要自己编译到opencv中。

以下是实现的SUFR算法 如果使用SIFT稍微改下即可

#include <opencv2/opencv.hpp>
#include <opencv2/xfeatures2d.hpp>int main()
{cv::Mat imageL = cv::imread("imgL.bmp");cv::Mat imageR = cv::imread("imgR.bmp");//提取特征点方法//SIFT//cv::Ptr<cv::xfeatures2d::SIFT> sift = cv::xfeatures2d::SIFT::create();//ORB//cv::Ptr<cv::ORB> orb = cv::ORB::create();//SURFcv::Ptr<cv::xfeatures2d::SURF> surf = cv::xfeatures2d::SURF::create();//特征点std::vector<cv::KeyPoint> keyPointL, keyPointR;//单独提取特征点surf->detect(imageL, keyPointL);surf->detect(imageR, keyPointR);//画特征点cv::Mat keyPointImageL;cv::Mat keyPointImageR;drawKeypoints(imageL, keyPointL, keyPointImageL, cv::Scalar::all(-1), cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);drawKeypoints(imageR, keyPointR, keyPointImageR, cv::Scalar::all(-1), cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);//显示窗口cv::namedWindow("KeyPoints of imageL");cv::namedWindow("KeyPoints of imageR");//显示特征点cv::imshow("KeyPoints of imageL", keyPointImageL);cv::imshow("KeyPoints of imageR", keyPointImageR);//特征点匹配cv::Mat despL, despR;//提取特征点并计算特征描述子surf->detectAndCompute(imageL, cv::Mat(), keyPointL, despL);surf->detectAndCompute(imageR, cv::Mat(), keyPointR, despR);//Struct for DMatch: query descriptor index, train descriptor index, train image index and distance between descriptors.//int queryIdx –>是测试图像的特征点描述符(descriptor)的下标,同时也是描述符对应特征点(keypoint)的下标。//int trainIdx –> 是样本图像的特征点描述符的下标,同样也是相应的特征点的下标。//int imgIdx –>当样本是多张图像的话有用。//float distance –>代表这一对匹配的特征点描述符(本质是向量)的欧氏距离,数值越小也就说明两个特征点越相像。std::vector<cv::DMatch> matches;//如果采用flannBased方法 那么 desp通过orb的到的类型不同需要先转换类型if (despL.type() != CV_32F || despR.type() != CV_32F){despL.convertTo(despL, CV_32F);despR.convertTo(despR, CV_32F);}cv::Ptr<cv::DescriptorMatcher> matcher = cv::DescriptorMatcher::create("FlannBased");matcher->match(despL, despR, matches);//计算特征点距离的最大值 double maxDist = 0; for (int i = 0; i < despL.rows; i++){double dist = matches[i].distance;if (dist > maxDist) maxDist = dist;}//挑选好的匹配点std::vector< cv::DMatch > good_matches;for (int i = 0; i < despL.rows; i++){if (matches[i].distance < 0.5*maxDist){good_matches.push_back(matches[i]);}}cv::Mat imageOutput;cv::drawMatches(imageL, keyPointL, imageR, keyPointR, good_matches, imageOutput);cv::namedWindow("picture of matching");cv::imshow("picture of matching", imageOutput);cv::waitKey(0);return 0;
}

opencv4使用sift以及surf相关推荐

  1. 【转载】关于Opencv里SIFT和SURF是有专利算法的说明

    原文地址 It's been two years already that I see the same subject that hangs on several times concerning  ...

  2. SIFT和SURF的替换算法——ORB (Oriented FAST and Rotated BRIEF 快速定向和旋转)

    SIFT和SURF的替代算法--ORB (Oriented FAST and Rotated BRIEF 快速定向和旋转 1. 效果图 2. 源码 参考 1. 用于关键点检测和描述的SIFT(Scal ...

  3. SLAM前端 ---------特征提取之ORB(ORB与SIFT与SURF)

    ORB 论文翻译: 一种特征匹配替代方法:对比SIFT或SURF 1.ORB特征简介  ORB是Oriented FAST and Rotated BRIEF(oFAST and rBRIEF)的简称 ...

  4. 在SIFT和SURF之后,有哪些比较新的且具有一定影响力的自然图像配准算法?

    链接:https://www.zhihu.com/question/32066833/answer/2041516754 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 作者:Vinjn张静 h ...

  5. 机器视觉特征提取:HOG、SIFT、SURF、ORB、LBP、HAAR

    来源:机器学习AI算法工程 本文约6200字,建议阅读10+分钟 本文为你介绍不同的机器视觉特征提取方法及其区别. 目录 一.SIFT(尺度不变特征变换) 二.HOG(方向梯度直方图) 三.SIFT和 ...

  6. 图像特征检测描述(一):SIFT、SURF、ORB、HOG、LBP特征的原理概述及OpenCV代码实现

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 什么叫特征检测?就是检测图像中目标的特征呗,所谓 ...

  7. OpenCV3如何使用SIFT和SURF Where did SIFT and SURF go in OpenCV 3?

    If you've had a chance to play around with OpenCV 3 (and do a lot of work with keypoint If you've ha ...

  8. 局部特征(4)——SIFT和SURF的比较

    局部特征系列: 局部特征(1)--入门篇 局部特征(2)--Harris角点 局部特征(3)--SURF特征总结 局部特征(4)--SIFT和SURF的比较 局部特征(5)--如何利用彩色信息 Col ...

  9. 翻译 | ORB: An efficient alternative to SIFT or SURF(ORB:对SIFT或SURF的一种有效选择)

    博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 ORB:对SIFT或SURF的一种 ...

最新文章

  1. 快速创建包快捷键大全_99个CAD插件大全,各种工具箱和超实用辅助插件,绘图从此不卡顿...
  2. -i 可以编译添加多个_大咖说 | 基于 NXP i.MX8 eIQ 环境搭建和编译
  3. administrator自动登录桌面
  4. CSS 水平垂直居中
  5. ecshop 全目录说明
  6. Linux实战第三篇:RHEL7.3 yum更换实战
  7. 聊聊高并发(二十九)解析java.util.concurrent各个组件(十一) 再看看ReentrantReadWriteLock可重入读-写锁...
  8. 我怎么感觉js快无敌了~
  9. 四阶龙格库塔法的基本思想_“李军班长工作法”为“卓越班组”建设注入新动力...
  10. React Native ActivityIndicator(菊花组件)
  11. 计算机表格制作培训教材,电脑制作表格教案设计
  12. 计算机相关知识——前端Base64编码解码的基础使用
  13. 人脸识别——OpenCV调取摄像头识别人脸
  14. [Andoid][踩坑]CTS 11_r3开始出现的testBootClassPathAndSystemServerClasspath_nonDuplicateClasses FAIL问题分析
  15. PID 控制保姆级培训教程下-全国大学生电子设计大赛赛前必备
  16. 部署并安装Discuz论坛
  17. android 开发 网易邮箱,怎么在Android客户端设置网易企业邮箱
  18. MarkDown语句显示红色(重点、关键字)
  19. 专题采访高维视力复健体系创始人 两天看清2.0的四维六度空间集训法
  20. linux下使用Navicat连接MySQL

热门文章

  1. 爱马仕手表如何鉴别真假?
  2. SQL Server视频总结(一):SQL Server概述
  3. 二维高斯核函数(python)
  4. C语言数据结构一元多项式
  5. 本地HTML文件 带参数方案
  6. 流媒体服务器主板型号怎么看,玩转NAS 篇五:双2.5G接口+J4125处理器,对于NAS意味着什么?威联通453Dmini对比453Bmini...
  7. Matlab之如何对cell进行排序?
  8. 信息安全-Ping扫描与抓包分析
  9. maven是干嘛的?
  10. Win7有多条隧道适配器(isatap、teredo、6to4)的原因及关闭方法(转)