OpenCV旋转估计(4)生成一个字符串表示的匹配图函数 matchesGraphAsString()

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

matchesGraphAsString 函数是OpenCV库中的一部分,位于 cv::detail 命名空间下。这个函数的主要作用是生成一个字符串表示的匹配图(matches graph),其中包含了一系列图像路径和它们之间的匹配信息。这对于调试或者可视化图像拼接过程中的匹配关系非常有用。

函数原型

cpp 复制代码
String cv::detail::matchesGraphAsString 	
(
	 	std::vector< String > &  	paths,
		std::vector< MatchesInfo > &  	pairwise_matches,
		float  	conf_threshold 
) 	

参数

  • paths: 一个字符串向量,包含了参与匹配的所有图像的路径。
  • pairwise_matches: 包含了每对图像之间匹配信息的向量。每个MatchesInfo结构体通常包含关键点匹配、匹配的质量等信息。
  • conf_threshold: 置信度阈值,用于过滤掉那些被认为不够可靠的匹配。

返回值

返回一个字符串,表示图像匹配图。该字符串格式化为易于阅读的形式,可以用来展示哪些图像与哪些图像相匹配及其置信度等信息。

代码示例

cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/stitching/detail/matchers.hpp>
#include <vector>

using namespace cv;
using namespace cv::detail;

int main()
{
    // 示例图像路径
    std::vector< String > paths = { "/media/dingxin/data/study/OpenCV/sources/images/stich1.png", "/media/dingxin/data/study/OpenCV/sources/images/stich2.png" };

    // 加载图像
    std::vector< Mat > images;
    for ( const auto& path : paths )
    {
        Mat img = imread( path );
        if ( img.empty() )
        {
            std::cerr << "无法加载图像: " << path << std::endl;
            return -1;
        }
        images.push_back( img );
    }

    // 初始化特征检测器和描述符提取器
    Ptr< Feature2D > detector = ORB::create();
    std::vector< std::vector< KeyPoint > > keypoints( images.size() );
    std::vector< Mat > descriptors( images.size() );

    // 检测关键点并计算描述符
    for ( size_t i = 0; i < images.size(); ++i )
    {
        detector->detectAndCompute( images[ i ], noArray(), keypoints[ i ], descriptors[ i ] );
    }

    // 匹配描述符
    std::vector< MatchesInfo > pairwise_matches;
    BFMatcher matcher( NORM_HAMMING );
    for ( size_t i = 0; i < images.size(); ++i )
    {
        for ( size_t j = i + 1; j < images.size(); ++j )
        {
            std::vector< DMatch > matches;
            matcher.match( descriptors[ i ], descriptors[ j ], matches );

            MatchesInfo mi;
            mi.src_img_idx = static_cast< int >( i );
            mi.dst_img_idx = static_cast< int >( j );
            mi.matches     = matches;
            // 假设这里我们简单地设置了置信度为1.0f,实际应用中应根据实际情况设置
            mi.confidence = 1.0f;
            pairwise_matches.push_back( mi );
        }
    }

    // 设置置信度阈值
    float conf_threshold = 1.0f;

    try
    {
        // 调用matchesGraphAsString函数
        String matches_graph_string = matchesGraphAsString( paths, pairwise_matches, conf_threshold );
        std::cout << "Matches Graph:\n" << matches_graph_string << std::endl;
    }
    catch ( const std::exception& e )
    {
        std::cerr << "运行时错误: " << e.what() << std::endl;
        return -1;
    }

    return 0;
}

运行结果

bash 复制代码
Matches Graph:
graph matches_graph{
"stich1.png";
"stich2.png";
}
相关推荐
波动几何7 分钟前
因果动力学架构技能cda
人工智能
Lucas_coding10 分钟前
【Claude Code Router】 Claude Code 兼容 OpenAI 格式 API, Claude code 接入本地部署模型
人工智能·python
jinanwuhuaguo12 分钟前
(第二十七篇)OpenClaw四月的演化风暴:OpenClaw 2026年4月全版本更新的文明级解读
大数据·人工智能·架构·kotlin·openclaw
测试员周周14 分钟前
【AI测试系统】第5篇:从 Archon 看 AI 工程化落地:为什么"确定性编排+AI 弹性智能"是终局?
人工智能·python·测试
RxGc20 分钟前
微软AI Agent框架深度测评:Microsoft Agent Framework 1.0 vs OpenClaw/Claude企业级能力对比
人工智能·agent
随便写写20 分钟前
第四章 智能体经典范式构建
人工智能
穿过生命散发芬芳21 分钟前
基于CodeBuddy Agent智能体平台构建自己第一个SKILL——相机推荐
人工智能
格林威25 分钟前
工业视觉项目:如何与客户有效沟通验收标准?
人工智能·数码相机·计算机视觉·视觉检测·机器视觉·工业相机·视觉项目
zhuiyisuifeng25 分钟前
AI新闻配图革命:GPTimage2镜像官网重塑时效与成本
人工智能·gpt
码云数智-大飞29 分钟前
本地部署大模型:隐私安全与多元优势一站式解读
运维·网络·人工智能