OpenCv实战笔记(4)基于opencv实现ORB特征匹配检测

一、原理作用

ORB 原理 (Oriented FAST and Rotated BRIEF):

特征点检测:使用 FAST 算法检测角点(关键点)。

方向计算:为每个关键点分配主方向,增强旋转不变性。

特征描述:使用 BRIEF(快速二进制描述符),通过图像灰度比较构造描述子。

描述子旋转:将 BRIEF 描述子旋转对齐主方向,增强旋转鲁棒性。
ORB作用

提取图像中稳定、重复性强的关键点;生成可用于图像匹配、识别、跟踪的紧凑二进制描述子。
应用场景:图像匹配(如拼接、全景)、 SLAM / 视觉里程计(机器人/无人车定位)、物体识别与检测、图像配准与对齐、图像检索

二、实现效果
三、参考代码

cpp 复制代码
void demo(const cv::Mat& img1, const cv::Mat& img2, cv::Mat& outputImg) {
    if (img1.empty() || img2.empty()) {
        std::cerr << "[feature_matching] Error: Input images are empty." << std::endl;
        return;
    }

    cv::Ptr<cv::ORB> orb = cv::ORB::create();

    std::vector<cv::KeyPoint> kp1, kp2;
    cv::Mat desc1, desc2;
    orb->detectAndCompute(img1, cv::noArray(), kp1, desc1);
    orb->detectAndCompute(img2, cv::noArray(), kp2, desc2);

    if (desc1.empty() || desc2.empty()) {
        std::cerr << "[feature_matching] Warning: Descriptor computation failed." << std::endl;
        return;
    }

    cv::BFMatcher matcher(cv::NORM_HAMMING);

    std::vector<std::vector<cv::DMatch>> knn_matches;
    matcher.knnMatch(desc1, desc2, knn_matches, 2);

    std::vector<cv::DMatch> good_matches;
    for (const auto& m : knn_matches) {
        if (m.size() >= 2 && m[0].distance < 0.75f * m[1].distance) {
            good_matches.push_back(m[0]);
        }
    }

    cv::drawMatches(img1, kp1, img2, kp2, good_matches, outputImg);
}
//应用
void MainWindow::sltOrb()
{
    // 加载两张灰度图像
    cv::Mat img1 = cv::imread("img1.jpg", cv::IMREAD_GRAYSCALE);
    cv::Mat img2 = cv::imread("img2.jpg", cv::IMREAD_GRAYSCALE);
    cv::Mat output;

    // 调用封装好的 ORB 特征匹配函数
    feature_matching::demo(img1, img2, output);

    // 显示结果图像
    if (!output.empty()) {
        cv::imshow("Feature Matching Result", output);
        cv::waitKey(0);
    }
}

欢迎关注我,一起交流!

相关推荐
木头左2 分钟前
结合机器学习的Backtrader跨市场交易策略研究
人工智能·机器学习·kotlin
Coovally AI模型快速验证8 分钟前
3D目标跟踪重磅突破!TrackAny3D实现「类别无关」统一建模,多项SOTA达成!
人工智能·yolo·机器学习·3d·目标跟踪·无人机·cocos2d
研梦非凡13 分钟前
CVPR 2025|基于粗略边界框监督的3D实例分割
人工智能·计算机网络·计算机视觉·3d
MiaoChuAI18 分钟前
秒出PPT vs 豆包AI PPT:实测哪款更好用?
人工智能·powerpoint
fsnine42 分钟前
深度学习——残差神经网路
人工智能·深度学习
乖女子@@@1 小时前
React笔记_组件之间进行数据传递
javascript·笔记·react.js
和鲸社区1 小时前
《斯坦福CS336》作业1开源,从0手搓大模型|代码复现+免环境配置
人工智能·python·深度学习·计算机视觉·语言模型·自然语言处理·nlp
fanstuck1 小时前
2025 年高教社杯全国大学生数学建模竞赛C 题 NIPT 的时点选择与胎儿的异常判定详解(一)
人工智能·目标检测·数学建模·数据挖掘·aigc
cxr8281 小时前
Claude Code PM 深度实战指南:AI驱动的GitHub项目管理与并行协作
人工智能·驱动开发·github
THMAIL2 小时前
深度学习从入门到精通 - LSTM与GRU深度剖析:破解长序列记忆遗忘困境
人工智能·python·深度学习·算法·机器学习·逻辑回归·lstm