SLAM OpenCV提取和匹配ORB特征
这个程序使用OpenCV提取和匹配图像的ORB特征。输入图片是两张不同视角拍摄的同一物体程序运行后先提取出第一张图片的ORB特征按任意键(比如空格)之后显示直接匹配ORB特征的结果可以看到有一些线和大多数线不平行出现了匹配错误。再按任意键之后过滤掉了匹配错误的连线代码#include iostream #include opencv2/core/core.hpp #include opencv2/features2d/features2d.hpp #include opencv2/highgui/highgui.hpp #include chrono using namespace std; using namespace cv; int main(int argc, char **argv) { if (argc ! 3) { cout usage: feature_extraction img1 img2 endl; return 1; } //-- 读取图像 Mat img_1 imread(argv[1], CV_LOAD_IMAGE_COLOR); Mat img_2 imread(argv[2], CV_LOAD_IMAGE_COLOR); assert(img_1.data ! nullptr img_2.data ! nullptr); //-- 初始化 std::vectorKeyPoint keypoints_1, keypoints_2; Mat descriptors_1, descriptors_2; PtrFeatureDetector detector ORB::create(); PtrDescriptorExtractor descriptor ORB::create(); PtrDescriptorMatcher matcher DescriptorMatcher::create(BruteForce-Hamming); //-- 第一步:检测 Oriented FAST 角点位置 chrono::steady_clock::time_point t1 chrono::steady_clock::now(); detector-detect(img_1, keypoints_1); detector-detect(img_2, keypoints_2); //-- 第二步:根据角点位置计算 BRIEF 描述子 descriptor-compute(img_1, keypoints_1, descriptors_1); descriptor-compute(img_2, keypoints_2, descriptors_2); chrono::steady_clock::time_point t2 chrono::steady_clock::now(); chrono::durationdouble time_used chrono::duration_castchrono::durationdouble(t2 - t1); cout extract ORB cost time_used.count() seconds. endl; Mat outimg1; drawKeypoints(img_1, keypoints_1, outimg1, Scalar::all(-1), DrawMatchesFlags::DEFAULT); imshow(ORB features, outimg1); //-- 第三步:对两幅图像中的BRIEF描述子进行匹配使用 Hamming 距离 vectorDMatch matches; t1 chrono::steady_clock::now(); matcher-match(descriptors_1, descriptors_2, matches); t2 chrono::steady_clock::now(); time_used chrono::duration_castchrono::durationdouble(t2 - t1); cout match ORB cost time_used.count() seconds. endl; //-- 第四步:匹配点对筛选 // 计算最小距离和最大距离 auto min_max minmax_element(matches.begin(), matches.end(), [](const DMatch m1, const DMatch m2) { return m1.distance m2.distance; }); double min_dist min_max.first-distance; double max_dist min_max.second-distance; printf(-- Max dist : %f \n, max_dist); printf(-- Min dist : %f \n, min_dist); //当描述子之间的距离大于两倍的最小距离时,即认为匹配有误.但有时候最小距离会非常小,设置一个经验值30作为下限. std::vectorDMatch good_matches; for (int i 0; i descriptors_1.rows; i) { if (matches[i].distance max(2 * min_dist, 30.0)) { good_matches.push_back(matches[i]); } } //-- 第五步:绘制匹配结果 Mat img_match; Mat img_goodmatch; drawMatches(img_1, keypoints_1, img_2, keypoints_2, matches, img_match); drawMatches(img_1, keypoints_1, img_2, keypoints_2, good_matches, img_goodmatch); imshow(all matches, img_match); imshow(good matches, img_goodmatch); waitKey(0); return 0; }参考高翔《视觉SLAM十四讲》

相关新闻

原生鸿蒙像素画板实战 20:拼豆模板生成

原生鸿蒙像素画板实战 20:拼豆模板生成

拼豆图案很适合成为像素画编辑器的起点,因为它天生就是离散网格和有限颜色。但模板不能只是一张参考图:用户导入以后,希望得到的是可改色、可拆层、可继续导出的项目。bitArt 用字符矩阵描述模板,再把字符映射为颜色和像素数组&am…

2026/10/9 2:36:18 阅读更多 →
QMCDecode解密原理与实战:解锁QQ音乐加密格式的完整指南

QMCDecode解密原理与实战:解锁QQ音乐加密格式的完整指南

1. 项目概述:从一首无法播放的歌说起如果你是一个音乐爱好者,或者像我一样,喜欢把喜欢的歌曲下载到本地,建立一个属于自己的、不受平台限制的音乐库,那么你很可能遇到过一种令人沮丧的情况:从某个主流音乐平…

2026/10/4 8:08:45 阅读更多 →
RSA加密原理深度解析与CTF实战攻击手法全攻略

RSA加密原理深度解析与CTF实战攻击手法全攻略

1. 项目概述:为什么RSA是密码学的基石如果你对网络安全、编程或者CTF竞赛稍有接触,那么“RSA”这个名字你一定不陌生。它不仅仅是三个字母,更是现代密码学大厦的一块基石,从我们日常的HTTPS网站加密,到数字签名、软件授…

2026/10/9 5:36:29 阅读更多 →

最新新闻

企业微信API开发:消息模板怎么设计才方便维护?

企业微信API开发:消息模板怎么设计才方便维护?

在企业微信消息推送项目中,订单通知、售后提醒和客户跟进消息往往有不同的格式。 如果每个业务模块都通过字符串拼接生成内容,后期修改文案时容易出现格式不统一、字段遗漏等问题。 可以考虑将消息内容与业务逻辑分开管理。 一、把固定内容和动态字段…

2026/10/11 4:55:26 阅读更多 →
边界值分析法:用最小用例成本精准捕获软件缺陷

边界值分析法:用最小用例成本精准捕获软件缺陷

1. 为什么边界区域总是藏着最多的bug1.1 从一次线上事故说起我印象最深的一次线上事故,不是复杂的高并发架构问题,而是一个看似简单的评分功能。系统规定用户评分范围是1到5分,前端做了滑动条只能拖1到5,结果后端接口校验时写的是…

2026/10/11 4:55:26 阅读更多 →
GitHub热榜的正确打开方式:从围观到技术选型的实战指南

GitHub热榜的正确打开方式:从围观到技术选型的实战指南

每天早上我习惯先刷一眼 GitHub 热榜,尤其是日榜。2026-10-09 的这份日榜,既有刚冒头的新仓库,也有更新了大版本之后重新冲上来的老项目。单看列表会觉得“今天又是 AI 和效率工具刷屏”,但如果你只停留在收藏夹里,那基…

2026/10/11 4:55:26 阅读更多 →
采访录音噪音大怎么修复人声:降噪之后还要检查可听性

采访录音噪音大怎么修复人声:降噪之后还要检查可听性

采访录音噪音大怎么修复人声,关键不是只看能不能一键降噪,而是先判断噪声类型、人声清晰度和成片用途,再分步骤处理。剪映专业版可以用于资料确认端侧场景下的视频剪辑、基础降噪处理和成片预览等环节;但如果录音存在严重失真、爆…

2026/10/11 4:55:26 阅读更多 →
GitHub九月热门榜:AI应用与开发者工具十大项目解析

GitHub九月热门榜:AI应用与开发者工具十大项目解析

每年9月,GitHub 的热门项目榜单都会迎来一波明显的换血。今年(2026年)尤其明显:AI 应用层的项目不再只是套壳,而是开始啃硬骨头——推理成本优化、多智能体协作、私有化部署都出现了值得关注的新面孔;开发者…

2026/10/11 4:55:26 阅读更多 →
流式响应处理实战:事件切分、增量解码与超时取消设计

流式响应处理实战:事件切分、增量解码与超时取消设计

1. 流式响应处理的核心设计思路1.1 为什么流式场景需要单独设计一套消费逻辑很多开发者第一次接触流式接口时,习惯性地把返回结果当成一个完整的 JSON 一次性解析,结果要么卡住不动,要么拿到一堆半截数据。流式响应的本质是服务端把一次完整回…

2026/10/11 4:54:26 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →