OpenCV入门 - 关键点描述子匹配Brute-force

对图片提取特征向量之后进行keypoint descriptors matching,从而可以判断特定图像与训练集中图片的匹配程度,BFMatcher暴力匹配类继承自抽象类DescriptorMatcher,"Brute-force descriptor matcher. For each descriptor in the first set, this matcher finds the closest descriptor in
the second set by trying each one. This descriptor matcher supports masking permissible matches of descriptor sets",下面通过一个简单实例可以看到效果。

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/nonfree/features2d.hpp> //

#include <iostream>
using namespace cv;
using namespace std;

int main(int argc, const char *argv[]){
    Mat car1 = imread("car1.jpeg", 0);// load as grayscale
    Mat car2 = imread("car2.jpeg", 0);

    SiftFeatureDetector detector;
    vector<KeyPoint> keypoints1, keypoints2;
    detector.detect(car1, keypoints1);
    detector.detect(car2, keypoints2);
    cout << "# keypoints of car1 :" << keypoints1.size() << endl;
    cout << "# keypoints of car2 :" << keypoints2.size() << endl;

    Mat descriptors1,descriptors2;
    Ptr<DescriptorExtractor> extractor = DescriptorExtractor::create("SIFT");
    extractor->compute(car1,keypoints1,descriptors1);
    extractor->compute(car2,keypoints2,descriptors2);

    BFMatcher bfmatcher(NORM_L2, true);
    vector<DMatch> matches;
    bfmatcher.match(descriptors1, descriptors2, matches);
    cout << "# matches : " << matches.size() << endl;

    // show it on an image
    Mat output;
    drawMatches(car1, keypoints1, car2, keypoints2, matches, output);
    imshow("car matches result",output);
    waitKey(0);

    return 0;
}

运行结果:

参考:

1.cv::imread()

2.Drawing Function of Keypoints and Matches

3.BFMatcher

时间: 2024-10-19 01:01:13

OpenCV入门 - 关键点描述子匹配Brute-force的相关文章

OpenCV入门 - 关键点描述子匹配Flann-based

和前面利用暴力法找距离最近的descriptor,Flann-based matcher使用快速近似最近邻搜索算法,在匹配前可以利用图片训练该matcher,从而加快检测速度(TODO). What is it Flann? FLANN is a library for performing fast approximate nearest neighbor searches in high dimensional spaces. It contains a collection of algo

BRIEF描述子生成算法

学习OpenCV关注微信公众号[OpenCV学堂] 一:介绍 我们知道SIFT算法通常通过对每个关键点生成128个特征向量作为描述子.SURF算法通常对关键点生成最少64个特征向量作为描述子.但是对于图像来说创建上千或者上万个这样的描述子内存开销比较大,运行速度受到严重影响.特别对嵌入式设备与一定设备来说,内存限制尤为明显,而且匹配的时候计算也比较耗时. 但是实际上这些特征数据OpenCV在匹配的时候并没有完全利用上,而是通过PCA.LDA等方法对它进行压缩,或者是LSH(局部敏感哈希)方法把这

【OpenCV入门教程之十八】OpenCV仿射变换 &amp; SURF特征点描述合辑

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/33320997 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 知乎:http://www.zhihu.com/people/mao-xing-yun 邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本: 2.4.9 本篇文章中,我们一起探讨了OpenCV中

【特征匹配】BRIEF特征描述子原理及源码解析

相关:Fast原理及源码解析 Harris原理及源码解析 SIFT原理及源码解析 SURF原理及源码解析 转载请注明出处: http://blog.csdn.net/luoshixian099/article/details/48338273 传统的特征点描述子如SIFT,SURF描述子,每个特征点采用128维(SIFT)或者64维(SURF)向量去描述,每个维度上占用4字节,SIFT需要128×4=512字节内存,SURF则需要256字节.如果对于内存资源有限的情况下,这种描述子方法显然不适应

【OpenCV】SIFT原理与源码分析:关键点描述

<SIFT原理与源码分析>系列文章索引:http://www.cnblogs.com/tianyalu/p/5467813.html 由前一篇<方向赋值>,为找到的关键点即SIFT特征点赋了值,包含位置.尺度和方向的信息.接下来的步骤是关键点描述,即用用一组向量将这个关键点描述出来,这个描述子不但包括关键点,也包括关键点周围对其有贡献的像素点.用来作为目标匹配的依据(所以描述子应该有较高的独特性,以保证匹配率),也可使关键点具有更多的不变特性,如光照变化.3D视点变化等. SIFT

OpenCV之特征检测器(Feature Detector),描述子提取器(Descriptor Extractor)和描述子匹配器(Descriptor Matcher)

1.特征检测子 -Harris cv::cornerHarris(image,strength,3,3,0.01); -Fast cv::Ptr<cv::FastFeatureDetector> fast = cv::FastFeatureDetector::create(); //或 cv::FAST(InputArray image, std::vector<KeyPoint> &keypoints, int threshold) //或 cv::FAST(InputA

OpenCV 入门教程 之环境配置 + 图片匹配 matchTemplate

1.什么是OpenCV OpenCV的全称是:Open Source Computer Vision Library.OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数和少量 C++ 类构成. 总结特点: 1.开源, 商业用途也不必公开自己的源代码或者改善后的代码. 2.效率高,简单的图像处理就算了,涉及到复杂的处理一般的类库无法满足比如CXImage 3.有巨头维护(Intel) 有这三个

BRIEF 特征描述子

Binary Robust Independent Elementary Features 1. BRIEF的基本原理 我们已经知道SIFT特征采用了128维的特征描述子,由于描述子用的浮点数,所以它将会占用512 bytes的空间.类似地,对于SURF特征,常见的是64维的描述子,它也将占用256bytes的空间.如果一幅图像中有1000个特征点(不要惊讶,这是很正常的事),那么SIFT或SURF特征描述子将占用大量的内存空间,对于那些资源紧张的应用,尤其是嵌入式的应用,这样的特征描述子显然是

OpenCV入门

此系列文章只是OpenCV tutorials的学习和总结. 网址:http://docs.opencv.org/doc/tutorials/tutorials.html 基础OpenCV入门包括以下内容: OpenCV介绍---------------------------------学习如何安装OpenCV. core模块,核心功能---------------------------学习基础模块,操作图像等. imgproc模块,图像处理-----------------------学习