BRISK算法在OpenCV3.0中的使用
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中的使用相关推荐
- OpenCV3.0中的离散傅里叶变换
图像中的离散傅里叶变换的相关理论较为简单,频域里面,对于一幅图像,高频部分代表了图像的细节.纹理信息:低频部分代表了图像的轮廓信息. 这里我们直接讲解OpenCV3.0中的离散傅里叶变换 1.dft( ...
- opencv3.0中contrib模块的添加
opencv从2.x到3.x是一个很大的转变,对于很多功能不完善.性能不稳定的模块,都被方法了extra_modules(扩展模块)里面了.这样倒是稳定了,但是对于我这样的新手,要添加这些扩展模块却是 ...
- opencv3.0中的无缝克隆图像——seamless_cloning(Poisson Image Editing)
opencv3.0 photo 模块加入了seamless_cloning类.该类对应的论文是"Poisson Image Editing" 主要可以实现一下功能: seamles ...
- OpenCV3.0中的图像金字塔与图片尺寸缩放
图像金字塔是图像中多尺度表达的一种,最主要用于图像分割,是一种以多分辨率来解释图像的有效但概念简单的结构.一幅图像的金字塔式一系列以金字塔形状排列的,分辨率逐步降低且来源于同一张原始图的图像集合.其通 ...
- OpenCV3.0中 Mat和IplImage相互转换
//IplImage->Mat //EXAMPLE: //浅拷贝: IplImage* pBinary=cvLoadImage("c://temp.jpg",0); Mat ...
- java opencv surf_在OpenCV3.1.0中使用SIFT,SURF算法
写在前边: 1.我使用的是python2.7 + OpenCV3.1.0 2.OpenCV3.0.0+的文档有很大问题,很多文档写的还是OpenCV2.0+, OpenCV3.0+根本用不了,其中有一 ...
- linux手写数字识别,OpenCV 3.0中的SVM训练 mnist 手写字体识别
前言: SVM(支持向量机)一种训练分类器的学习方法 mnist 是一个手写字体图像数据库,训练样本有60000个,测试样本有10000个 LibSVM 一个常用的SVM框架 OpenCV3.0 中的 ...
- VS2013+OpenCV3.0编译TLD跟踪算法
TLD算法跟CMT算法是同一个大神写的,不过现在已经停止更新了,原作者推荐使用CMT算法,不过还是要编译一下它比较一下两个有什么不同.因为TLD算法停止更新的时候还是OPenCV2.X,所以要移植到O ...
- OpenCV3.0中有哪些视频背景/前景分割(背景建模/前景提取)算法的类,它们各自的算法原理、特点是什么,并附示例代码
关于OpenCV3中有哪些视频背景/前景分割(背景建模/前景提取)算法的类,汇总如下: cv::Algorithm cv::BackgroundSubtractor cv::Backgro ...
最新文章
- python oracle数据库操作_Python连接oracle数据库的基本操作
- [推荐]经典炸弹人手机游戏[年兽防御战2]
- 博客刚刚开通,纪念一下。
- VC++ 6.0 C8051F340 USB PC侧通信 Demo
- java 李刚 pdf_Java数据库技术详解(李刚) PDF_源雷技术空间
- 代码更换ui图片_用技术的方式,在UI设计稿中设置随机码,保证高清
- linux怎么运行g77,Linux安装g77编译器的技巧
- 少儿编程几种语言_您使用了几种编程语言?
- 小米获京东自营安卓平板销量冠军 小米平板5 Pro全版本闪降100元
- 台达plc读取变频器电流案例_PLC模拟量信号数据转换过程
- ejb2.0详细开发过程
- C# 多线程六 事件 AutoResetEvent/ManualResetEvent 的简单理解与运用
- 一个简单易用的m3u8下载器,支持下载m3u8链接或文件为mp4或ts格式
- Android 分贝测试仪功能,挥泪整理面经
- PS Raw增效工具:Camera Raw 15 Mac
- 没学历,当程序员还有机会吗?
- 书评《半小时漫画中国史》
- 标准解读系列之六:车联网网络安全标准进展
- 推荐几本Android程序员必读书籍
- java计算机毕业设计健康饮食推荐系统源码+mysql数据库+系统+lw文档+部署