SLAM OpenCV提取和匹配ORB特征
📅 2026/7/24 5:58:57
👁️ 次浏览
这个程序使用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十四讲》
说实话,做Geo urdu这块,真没多少人愿意跟你掏心窝子讲真话。大家都想着怎么把你忽悠进去,收个高价,最后给你扔一堆机器翻译的垃圾。我干这行八年了,见过太多客户因为不懂行,被坑得底裤都不剩。今天不整那些虚头巴脑的理论,就聊聊Geo urdu翻译里那些血淋淋的真相。先说个…
📅 2026/7/24 5:58:29
拼豆图案很适合成为像素画编辑器的起点,因为它天生就是离散网格和有限颜色。但模板不能只是一张参考图:用户导入以后,希望得到的是可改色、可拆层、可继续导出的项目。bitArt 用字符矩阵描述模板,再把字符映射为颜色和像素数组&am…
📅 2026/7/24 5:57:56
1. 项目概述:从一首无法播放的歌说起如果你是一个音乐爱好者,或者像我一样,喜欢把喜欢的歌曲下载到本地,建立一个属于自己的、不受平台限制的音乐库,那么你很可能遇到过一种令人沮丧的情况:从某个主流音乐平…
📅 2026/7/24 5:57:56
1. 先搞清楚“作弊行为”到底指什么看到“模型评估中的作弊行为”这个标题,很多人第一反应可能是开发者故意篡改测试结果。但实际场景中,更多是评估流程设计不严谨导致的“非故意作弊”。比如训练数据混入测试样本、评估指标选择偏颇、过拟合公开排行榜&…
📅 2026/7/24 7:15:24
1. 项目概述:Skills 编写学习刚入行时,我总以为技术文档就是简单的功能罗列。直到负责第一个企业级项目,被甲方要求重写了七版技术方案后,才真正理解skills编写的艺术。好的skills描述不是岗位说明书的翻版,而是用技术…
📅 2026/7/24 7:15:24
1. 项目概述:从芯片到系统,一个高性能ADC评估平台的深度解析在精密测量、工业自动化或者医疗成像这类对信号保真度要求极高的领域,选对一颗模数转换器(ADC)往往意味着项目成功了一半。但问题来了,数据手册上…
📅 2026/7/24 7:15:24
1. 智能体电商的崛起与行业变革最近半年,一个名为Zen7 Labs的创业公司突然成为科技圈热议焦点。这家公司在智能体电商(Agentic Commerce)领域的四次关键实践,不仅定义了行业标准,更引来了谷歌和OpenAI的快速跟进。作为…
📅 2026/7/24 7:15:24
1. 项目概述与核心价值在服务器、通信基站或者高端工业控制器的机箱里,你总能找到一块不起眼的小板子,上面密密麻麻布满了电源芯片。这些芯片负责将输入的12V或者48V转换成CPU、内存、FPGA需要的各种低电压。作为系统设计者,我们最怕的就是半…
📅 2026/7/24 7:15:24
哎,说实话,今儿个心里挺堵得慌。昨晚又熬到凌晨三点,盯着那后台数据发呆,眼睛干涩得像撒了把沙子。咱们做这行的,谁没经历过那种绝望时刻?看着同行一个个起飞,自己却还在原地打转,那种焦虑感,真的,只有经历过的人才懂。我试过无数种方法,什么SEO优化、内容营销、社群…
📅 2026/7/24 7:14:54
大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…
📅 2026/7/24 0:00:05
srcampy /libsrcampy 名称释义先明确结论: 官方文档没有公布标准化英文全称,是地平线内部项目缩写;行业公认拆解如下:srcampy Source Amplifier Python bindingsrc Source(图像源:MIPI Sensor、视频源&am…
📅 2026/7/24 0:01:06
该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…
📅 2026/7/24 0:01:06
1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…
📅 2026/7/24 1:07:52
1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…
📅 2026/7/24 1:07:52
更多请点击:
https://intelliparadigm.com
第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…
📅 2026/7/24 1:07:52
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/24 7:08:08
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/23 17:07:28
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/24 5:08:03