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

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

BFMatcher类

暴力匹配BFMatcher类:

对于第一个集合中的每个描述符,这个匹配器通过尝试每个描述符找到第二个集合中最接近的描述符。

class CV_EXPORTS_W BFMatcher : public DescriptorMatcher{public://暴力匹配器构造函数    CV_WRAP BFMatcher(      int normType=NORM_L2, //NORM_L1,NORM_L2,NORM_HAMMING,NORM_HAMMING2之一    bool crossCheck=false );//为每个描述符找到k个最近的邻居,true时只返回一致的对    virtual ~BFMatcher() {}    virtual bool isMaskSupported() const { return true; }    virtual Ptr
clone( bool emptyTrainData=false ) const;protected: virtual void knnMatchImpl( InputArray queryDescriptors, std::vector
>& matches, int k, InputArrayOfArrays masks=noArray(), bool compactResult=false ); virtual void radiusMatchImpl( InputArray queryDescriptors, std::vector
>& matches, float maxDistance, InputArrayOfArrays masks=noArray(), bool compactResult=false ); int normType; bool crossCheck;};

关于normType:

对于SIFT和SURF描述符,选择L1和L2较好;
ORB、BRISK、BRIEF,选择NORM_HAMMING;
对于ORB,当WTA_K == 3或4时,使用NORM_HAMMING2。

函数drawMatches():

从两个图像中用一条线连接两个关键点(圈)绘制找到的关键点匹配。

函数drawMatches()参数说明:

void drawMatches( InputArray img1, //第一个源图像const std::vector
& keypoints1, //第一个源图像的关键点InputArray img2, //第二个源图像const std::vector
& keypoints2, //第二个源图像的关键点const std::vector
& matches1to2, //从第一个图像到第二个图像匹配InputOutputArray outImg, //输出图像const Scalar& matchColor=Scalar::all(-1), //匹配到的关键点的颜色(线条和连接的关键点)const Scalar& singlePointColor=Scalar::all(-1), //未匹配到的关键点的颜色(圆圈)const std::vector
& matchesMask=std::vector
(), //确定绘制哪些匹配的掩模。如果掩模为空,则绘制所有匹配int flags=DrawMatchesFlags::DEFAULT ); //设置绘图功能的标志

BFMatcher示例:

#include
#include
using namespace cv;using namespace cv::xfeatures2d;int main(){ Mat src1, src2, dst; src1 = imread("E:/image/image/card2.jpg"); src2 = imread("E:/image/image/cards.jpg"); if (src1.empty()||src2.empty()) { printf("could not load image \n"); return -1; } namedWindow("input", CV_WINDOW_AUTOSIZE); imshow("input", src1); Ptr
dector = SURF::create(700); std::vector
keypoints1,keypoints2; Mat descriptor1, descriptor2; dector->detectAndCompute(src1, Mat(), keypoints1, descriptor1); dector->detectAndCompute(src2, Mat(), keypoints2, descriptor2); //指定L1或L2距离 BFMatcher matcher(NORM_L2); std::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;}

这里写图片描述

这里写图片描述

你可能感兴趣的文章
mysql5.6.21重置数据库的root密码
查看>>
Mysql5.6主从复制-基于binlog
查看>>
MySQL5.6忘记root密码(win平台)
查看>>
MySQL5.6的Linux安装shell脚本之二进制安装(一)
查看>>
MySQL5.6的zip包安装教程
查看>>
mysql5.7 for windows_MySQL 5.7 for Windows 解压缩版配置安装
查看>>
Webpack 基本环境搭建
查看>>
mysql5.7 安装版 表不能输入汉字解决方案
查看>>
MySQL5.7.18主从复制搭建(一主一从)
查看>>
MySQL5.7.19-win64安装启动
查看>>
mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
查看>>
MySQL5.7.37windows解压版的安装使用
查看>>
mysql5.7免费下载地址
查看>>
mysql5.7命令总结
查看>>
mysql5.7安装
查看>>
mysql5.7性能调优my.ini
查看>>
MySQL5.7新增Performance Schema表
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>