OpenCV中特征点提取和匹配的通用方法_第1页
OpenCV中特征点提取和匹配的通用方法_第2页
OpenCV中特征点提取和匹配的通用方法_第3页
OpenCV中特征点提取和匹配的通用方法_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

OpenCV中特征点提取和匹配的通用方法OpenCV在新版本中把很多C语言的代码都重新整理成了C+代码,让我们在使用的时候更加方便灵活。其中对于特征点的提取和匹配,充分体现了C+的强大。下面直接用例子来说明。假设我们有两幅图:1.bmp和2.bmp,要从中提取体征点并匹配,代码如下:/ Load image from fileIplImage *pLeftImage = cvLoadImage(1.bmp, CV_LOAD_IMAGE_GRAYSCALE);IplImage *pRightImage = cvLoadImage(2.bmp, CV_LOAD_IMAGE_GRAYSCALE);/ Convert IplImage to cv:MatMat matLeftImage = Mat(pLeftImage, false);/ Do not copyMat matRightImage = Mat(pRightImage, false);/ Key point and its descriptorvector LeftKey;vector RightKey;Mat LeftDescriptor;Mat RightDescriptor;vector Matches;/ Detect key points from imageFeatureDetector *pDetector = new SurfFeatureDetector; / 这里我们用了SURF特征点pDetector-detect(matLeftImage, LeftKey);pDetector-detect(matRightImage, RightKey);delete pDetector;/ Extract descriptorsDescriptorExtractor *pExtractor = new SurfDescriptorExtractor; / 提取SURF描述向量pExtractor-compute(matLeftImage, LeftKey, LeftDescriptor);pExtractor-compute(matRightImage, RightKey, RightDescriptor);delete pExtractor;/ Matching featuresDescriptorMatcher *pMatcher = new FlannBasedMatcher; / 使用Flann匹配算法pMatcher-match(LeftDescriptor, RightDescriptor, Matches);delete pMatcher;/ Show resultMat OutImage;drawMatches(matLeftImage, LeftKey, matRightImage, RightKey, Matches, OutImage);cvNamedWindow( Match features, 1);cvShowImage(Match features, &(IplImage(OutImage);cvWaitKey( 0 );cvDestroyWindow( Match features ); 从上面的代码可以看见,用OpenCV来做特征提取匹配相当简便,出去读图和显示结果的代码,真正核心的部分只有3段代码,分别是检测关键点,提取描述向量和特征匹配,一共只有11行代码。 在我的示例代码中,使用的是SURF特征,而在OpenCV中,实现了很多种特征,如SIFT,FAST等,这些特征的实现各不相同,但是都是从一个公共抽象基类派生出来的,因此可以用多态方便地切换特征提取算法。下面我将详细地说明。1 FeatureDetector FeatureDetector是关键点检测类的抽象基类,其已经实现的具体类有: class FastFeatureDetector class GoodFeaturesToTrackDetector class MserFeatureDetector class StarFeatureDetector class SiftFeatureDetector class SurfFeatureDetector要使用某一种检测器,可以直接调用FeatureDetector的工厂来创建,该工厂是一个静态方法,如下:/ Create feature detector by detector name.static Ptr create( const string& detectorType );也可以像我的示例代码中那样显式的创建,如下:FeatureDetector *pDetector = new SurfFeatureDetector;可以用swich实现在多种方法中切换。2 DescriptorExtractor DescriptorExtractor是提取关键点的描述向量类抽象基类,其具体类有: class SiftDescriptorExtractor class SurfDescriptorExtractor class CalonderDescriptorExtractor class BriefDescriptorExtractor class OpponentColorDescriptorExtractor要使用某一种描述向量,可以调用DescriptorExtractor的工厂来创建,静态方法如下:static Ptr create( const string& descriptorExtractorType );也可以像我的示例代码中那样显式的创建,如下:DescriptorExtractor *pExtractor = new SurfDescriptorExtractor;可以用swich实现在多种方法中切换。3 DescriptorMatcher DescriptorMatcher是匹配器的抽象基类,其具体类有: class BruteForceMatcher class FlannBasedMatcher匹配器可以由静态工厂方法直接创建,如下:static Ptr create( const string& descriptorMatcherType );也可以像我的示例代码中那样显式的创建,如下:DescriptorMatcher *

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论