BRISK算法在OpenCV3.0中的使用

在OpenCV3.0中一些局部特征相关的接口还是有一些改动的,因为最近在测试BRISK部分内容,所以将OpenCV3.0中BRISK的使用贴出来,其他局部特征提取、匹配的算法类似。

【注意】BRISK算法descriptors是二进制串,因此最后进行特征点匹配时是使用的汉明距离,调用的radiusMatch进行匹配**


代码

#include <opencv2/core/core.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <Windows.h> using namespace cv;int main()
{//Load Image  Mat im1 = imread("scene.pgm", CV_LOAD_IMAGE_GRAYSCALE);Mat im2 = imread("basmati.pgm", CV_LOAD_IMAGE_GRAYSCALE);if (!im1.data || !im2.data){std::cout << "Error reading images " << std::endl;return -1;}//构建BRISK对象,参数都与BRISK论文保持一致Ptr<BRISK> brisk = BRISK::create(70, 4, 1.0f);std::vector<KeyPoint> kp1, kp2; //im1,im2 keypointsMat des1, des2;//im1,im2 descriptorsdouble start = GetTickCount();//记录起始时间brisk->detectAndCompute(im1, Mat(), kp1, des1, false);brisk->detectAndCompute(im2, Mat(), kp2, des2, false);BFMatcher matcher(NORM_HAMMING,true);std::vector<std::vector<DMatch>> matches;//此处参数很重要,90.0f为判定为相似特征点的汉明距离阈值matcher.radiusMatch(des1, des2, matches, 90.0f, Mat(), true);double end = GetTickCount();std::cout << "Brisk耗时:" << (end - start) << "ms" << std::endl;std::cout << "Img1特征点数: " << kp1.size() << std::endl;std::cout << "Img2特征点数: " << kp2.size() << std::endl;Mat img_match;drawMatches(im1, kp1, im2, kp2, matches, img_match,          Scalar::all(-1), Scalar::all(-1), std::vector<std::vector<char> >(),   DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS);int matchNum = 0;//总的匹配点数for (int i = 0; i < matches.size() && matches[i].size() > 0; i++){++matchNum; if (matches[i].size() < 1)break;}std::cout << "Brisk匹配点数: " << matchNum << std::endl;imshow("Brisk", img_match);waitKey(0);return 0;
}

实验截图

BRISK算法在OpenCV3.0中的使用相关推荐

  1. OpenCV3.0中的离散傅里叶变换

    图像中的离散傅里叶变换的相关理论较为简单,频域里面,对于一幅图像,高频部分代表了图像的细节.纹理信息:低频部分代表了图像的轮廓信息. 这里我们直接讲解OpenCV3.0中的离散傅里叶变换 1.dft( ...

  2. opencv3.0中contrib模块的添加

    opencv从2.x到3.x是一个很大的转变,对于很多功能不完善.性能不稳定的模块,都被方法了extra_modules(扩展模块)里面了.这样倒是稳定了,但是对于我这样的新手,要添加这些扩展模块却是 ...

  3. opencv3.0中的无缝克隆图像——seamless_cloning(Poisson Image Editing)

    opencv3.0 photo 模块加入了seamless_cloning类.该类对应的论文是"Poisson Image Editing" 主要可以实现一下功能: seamles ...

  4. OpenCV3.0中的图像金字塔与图片尺寸缩放

    图像金字塔是图像中多尺度表达的一种,最主要用于图像分割,是一种以多分辨率来解释图像的有效但概念简单的结构.一幅图像的金字塔式一系列以金字塔形状排列的,分辨率逐步降低且来源于同一张原始图的图像集合.其通 ...

  5. OpenCV3.0中 Mat和IplImage相互转换

    //IplImage->Mat //EXAMPLE: //浅拷贝: IplImage* pBinary=cvLoadImage("c://temp.jpg",0); Mat ...

  6. java opencv surf_在OpenCV3.1.0中使用SIFT,SURF算法

    写在前边: 1.我使用的是python2.7 + OpenCV3.1.0 2.OpenCV3.0.0+的文档有很大问题,很多文档写的还是OpenCV2.0+, OpenCV3.0+根本用不了,其中有一 ...

  7. linux手写数字识别,OpenCV 3.0中的SVM训练 mnist 手写字体识别

    前言: SVM(支持向量机)一种训练分类器的学习方法 mnist 是一个手写字体图像数据库,训练样本有60000个,测试样本有10000个 LibSVM 一个常用的SVM框架 OpenCV3.0 中的 ...

  8. VS2013+OpenCV3.0编译TLD跟踪算法

    TLD算法跟CMT算法是同一个大神写的,不过现在已经停止更新了,原作者推荐使用CMT算法,不过还是要编译一下它比较一下两个有什么不同.因为TLD算法停止更新的时候还是OPenCV2.X,所以要移植到O ...

  9. OpenCV3.0中有哪些视频背景/前景分割(背景建模/前景提取)算法的类,它们各自的算法原理、特点是什么,并附示例代码

    关于OpenCV3中有哪些视频背景/前景分割(背景建模/前景提取)算法的类,汇总如下: cv::Algorithm   cv::BackgroundSubtractor     cv::Backgro ...

最新文章

  1. python oracle数据库操作_Python连接oracle数据库的基本操作
  2. [推荐]经典炸弹人手机游戏[年兽防御战2]
  3. 博客刚刚开通,纪念一下。
  4. VC++ 6.0 C8051F340 USB PC侧通信 Demo
  5. java 李刚 pdf_Java数据库技术详解(李刚) PDF_源雷技术空间
  6. 代码更换ui图片_用技术的方式,在UI设计稿中设置随机码,保证高清
  7. linux怎么运行g77,Linux安装g77编译器的技巧
  8. 少儿编程几种语言_您使用了几种编程语言?
  9. 小米获京东自营安卓平板销量冠军 小米平板5 Pro全版本闪降100元
  10. 台达plc读取变频器电流案例_PLC模拟量信号数据转换过程
  11. ejb2.0详细开发过程
  12. C# 多线程六 事件 AutoResetEvent/ManualResetEvent 的简单理解与运用
  13. 一个简单易用的m3u8下载器,支持下载m3u8链接或文件为mp4或ts格式
  14. Android 分贝测试仪功能,挥泪整理面经
  15. PS Raw增效工具:Camera Raw 15 Mac
  16. 没学历,当程序员还有机会吗?
  17. 书评《半小时漫画中国史》
  18. 标准解读系列之六:车联网网络安全标准进展
  19. 推荐几本Android程序员必读书籍
  20. java计算机毕业设计健康饮食推荐系统源码+mysql数据库+系统+lw文档+部署

热门文章

  1. 泸州职业技术学院计算机单招试题,泸州职业技术学院普通类9+3单招考试技能测试考纲...
  2. 用sqlcipher对已有的SQLite数据库加密
  3. HBase-11-HBase Coprocessor HBase协处理器
  4. 太原理工大学计算机专业全国排名,2020计算机专业大学排名
  5. ERP100 論壇,ORACLE ERP
  6. Python感知器算法
  7. Vue开发后台管理系统
  8. OLED12864模块全屏缓冲刷新
  9. Python操作Excel自动插入图片
  10. 软考高级 真题 2012年上半年 信息系统项目管理师 论文