opencv3/C++怎么实现FLANN特征匹配
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,这篇文章主要介绍了opencv3/C++怎么实现FLANN特征匹配的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇opencv3/C++怎么实现FLANN特征匹配文章都会有
千家信息网最后更新 2025年01月22日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安全错误
数据库的锁怎样保障安全
网络安全等级由高到低
苏州安卓应用软件开发要多少钱
关系型数据库三范式
绿园区新时代网络安全服务保障
天宁区软件开发培训学校
个体工商户可以做网络技术吗
龙舟绘画软件开发
360关闭了刷机服务器
谈谈对软件开发的了解情况
辽宁特色软件开发技巧
日本都有什么品牌的服务器
服务器一被连接网络就断了
数据库和显卡区别
今日头条系统数据库
app软件开发委托合同
数据库中的技术有哪些问题
合肥ios软件开发多少钱
网络技术基础单元目标
取数据库不为空数据类型
南通水电缴费软件开发团队
网络安全图片幼儿
湖北低延时边缘计算服务器
联志1u服务器机箱
新世界美西哪个服务器人多
统计局网络安全政务信息
如何学好数据库100字
共享中心数据中心服务器
app软件开发委托合同
焦作淘宝软件开发
拾柒网络技术北京有限公司官网