博客
关于我
opencv3/C++ 描述符匹配
阅读量:141 次
发布时间:2019-02-27

本文共 1885 字,大约阅读时间需要 6 分钟。

BFMatcher类是一个用于暴力匹配的匹配器,它通过尝试每个描述符找到第二个集合中最接近的描述符。BFMatcher类继承自DescriptorMatcher类,提供了两种主要的匹配方法:knnMatch和radiusMatch。

BFMatcher类详细说明

BFMatcher类的构造函数接受两个参数:

  • normType:描述符的归一化类型,支持NORM_L2、NORM_L1、NORM_HAMMING和NORM_HAMMING2。对于SIFT和SURF描述符,建议使用L1或L2;对于ORB、BRISK和BRIEF,建议使用HAMMING;当ORB的WTA_K为3或4时,使用HAMMING2。
  • crossCheck:布尔值,设为true时,匹配器会返回一致的对,即只返回满足某些条件的匹配结果。

BFMatcher类的核心方法包括:

  • knnMatchImpl:执行k近邻匹配,返回k个最接近的邻居。
  • radiusMatchImpl:基于距离范围进行匹配,返回距离不超过maxDistance的描述符。

drawMatches函数说明

drawMatches函数用于从两个图像中绘制找到的关键点匹配。函数接受以下参数:

  • img1:第一个源图像。
  • keypoints1:第一个源图像的关键点。
  • img2:第二个源图像。
  • keypoints2:第二个源图像的关键点。
  • matches1to2:从第一个图像到第二个图像的匹配结果。
  • outImg:输出图像。
  • matchColor:匹配到的关键点的颜色。
  • singlePointColor:未匹配到的关键点的颜色。
  • matchesMask:决定绘制哪些匹配的掩模。
  • flags:绘图功能的标志。

BFMatcher示例

以下是一个使用BFMatcher类进行关键点匹配的示例代码:

#include 
#include
using namespace cv;using namespace cv::xfeatures2d;int main() { Mat src1, src2, dst; src1 = imread("card2.jpg"); src2 = imread("cards.jpg"); if (src1.empty() || src2.empty()) { printf("could not load image \n"); return -1; } namedWindow("input", CV_WINDOW_AUTOSIZE); imshow("input", src1); Ptr
detector = SURF::create(700); vector
keypoints1, keypoints2; Mat descriptor1, descriptor2; detector->detectAndCompute(src1, Mat(), keypoints1, descriptor1); detector->detectAndCompute(src2, Mat(), keypoints2, descriptor2); BFMatcher matcher(NORM_L2); vector
matchers; matcher.match(descriptor1, descriptor2, matchers); Mat result; drawMatches(src1, keypoints1, src2, keypoints2, matchers, result, Scalar::all(-1), Scalar(0,255,0)); namedWindow("output", CV_WINDOW_AUTOSIZE); imshow("output", result); waitKey(0); return 0;}

总结

BFMatcher类提供了一个强大的工具来进行描述符匹配,适用于需要精确匹配的任务。结合drawMatches函数,可以直观地展示关键点匹配结果。此外,通过合理选择normType和配置参数,可以优化匹配性能和结果。

转载地址:http://egnd.baihongyu.com/

你可能感兴趣的文章
Openlayers高级交互(4/20):手绘多边形,导出KML文件,可以自定义name和style
查看>>
Openlayers高级交互(5/20):右键点击,获取该点下多个图层的feature信息
查看>>
Openlayers高级交互(6/20):绘制某点,判断它是否在一个电子围栏内
查看>>
Openlayers高级交互(7/20):点击某点弹出窗口,自动播放视频
查看>>
Openlayers高级交互(8/20):选取feature,平移feature
查看>>
Openlayers高级交互(9/20):编辑图形(放缩、平移、变形、旋转),停止编辑
查看>>
Openlayers:DMS-DD坐标形式互相转换
查看>>
openlayers:圆孔相机根据卫星经度、纬度、高度、半径比例推算绘制地面的拍摄的区域
查看>>
OpenLDAP(2.4.3x)服务器搭建及配置说明
查看>>
OpenLDAP编译安装及配置
查看>>
Openmax IL (二)Android多媒体编解码Component
查看>>
OpenMCU(一):STM32F407 FreeRTOS移植
查看>>
OpenMCU(三):STM32F103 FreeRTOS移植
查看>>
OpenMCU(三):STM32F103 FreeRTOS移植
查看>>
OpenMCU(二):GD32E23xx FreeRTOS移植
查看>>
OpenMCU(五):STM32F103时钟树初始化分析
查看>>
OpenMCU(四):STM32F103启动汇编代码分析
查看>>
OpenMetadata 命令执行漏洞复现(CVE-2024-28255)
查看>>
OpenMMLab | AI玩家已上线!和InternLM解锁“谁是卧底”新玩法
查看>>
OpenMMLab | S4模型详解:应对长序列建模的有效方法
查看>>