opencv3/C++怎么实现FLANN特征匹配
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍了opencv3/C++怎么实现FLANN特征匹配的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇opencv3/C++怎么实现FLANN特征匹配文章都会有
千家信息网最后更新 2026年11月04日opencv3/C++怎么实现FLANN特征匹配
这篇文章主要介绍了opencv3/C++怎么实现FLANN特征匹配的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇opencv3/C++怎么实现FLANN特征匹配文章都会有所收获,下面我们一起来看看吧。
使用函数detectAndCompute()检测关键点并计算描述符
函数detectAndCompute()参数说明:
void detectAndCompute( InputArray image, //图像InputArray mask, //掩模CV_OUT std::vector& keypoints,//输出关键点的集合OutputArray descriptors,//计算描述符(descriptors[i]是为keypoints[i]的计算描述符)bool useProvidedKeypoints=false //使用提供的关键点);
match()从查询集中查找每个描述符的最佳匹配。
参数说明:
void match( InputArray queryDescriptors, //查询描述符集InputArray trainDescriptors, //训练描述符集合CV_OUT std::vector& matches, //匹配InputArray mask=noArray() //指定输入查询和描述符的列表矩阵之间的允许匹配的掩码) const;
FLANN特征匹配示例:
#include#include using namespace cv;using namespace cv::xfeatures2d;//FLANN对高维数据较快int main(){ Mat src1,src2; src1 = imread("E:/image/image/card2.jpg"); src2 = imread("E:/image/image/cards.jpg"); if (src1.empty() || src2.empty()) { printf("can ont load images....\n"); return -1; } imshow("image1", src1); imshow("image2", src2); int minHessian = 400; //选择SURF特征 Ptr detector = SURF::create(minHessian); std::vector keypoints1; std::vector keypoints2; Mat descriptor1, descriptor2; //检测关键点并计算描述符 detector->detectAndCompute(src1, Mat(), keypoints1, descriptor1); detector->detectAndCompute(src2, Mat(), keypoints2, descriptor2); //基于Flann的描述符匹配器 FlannBasedMatcher matcher; std::vector matches; //从查询集中查找每个描述符的最佳匹配 matcher.match(descriptor1, descriptor2, matches); double minDist = 1000; double maxDist = 0; for (int i = 0; i < descriptor1.rows; i++) { double dist = matches[i].distance; printf("%f \n", dist); if (dist > maxDist) { maxDist = dist; } if (dist < minDist) { minDist = dist; } } //DMatch类用于匹配关键点描述符的 std::vector goodMatches; for (int i = 0; i < descriptor1.rows; i++) { double dist = matches[i].distance; if (dist < max(2.5*minDist, 0.02)) { goodMatches.push_back(matches[i]); } } Mat matchesImg; drawMatches(src1, keypoints1, src2, keypoints2, goodMatches, matchesImg, Scalar::all(-1), Scalar::all(-1), std::vector (), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS); imshow("output", matchesImg); waitKey(); return 0;}


关于"opencv3/C++怎么实现FLANN特征匹配"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"opencv3/C++怎么实现FLANN特征匹配"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
特征
关键
关键点
查询
知识
内容
函数
参数
篇文章
检测
之间
价值
图像
操作简单
数据
文章
易懂
更多
看吧
矩阵
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技公司起名
科技互联网项目
圆梦互联网科技
朗新科技与工业互联网
金诺互联网科技
掌上梦互联网科技
长亮科技互联网金融
互联网科技素材视频竖屏
衡水科技产业互联网平台
创业天下互联网科技有限公司
厦门比较好的科技互联网公司
和信科技工业互联网
知域互联网科技有限公司大骗子
本届互联网博览会上的黑科技
互联网科技大赛获奖感言
元气玛特互联网科技公司是外包吗
中国互联网有什么科技
上海同邻互联网科技有限公司规模
互联网科技接地气
互联网科技大会大佬
新华互联网科技学校
科技和互联网公司
互联网科技集团
西安互联网科技
唐信互联网科技
新华互联网科技2019
欧洲十大科技互联网公司
昭通互联网科技选哪家
链环科技传统企业怎么转型互联网
互联网科技数字货币