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";
}
相关推荐
空堂与归1 分钟前
迁移学习怎么落地?Transformers 库微调实战
人工智能·机器学习·自然语言处理·transformer·迁移学习
啥都想学点的研究生1 分钟前
一篇文章讲清楚:朴素贝叶斯
人工智能·机器学习·概率论
刘同学的 AI学习手记4 分钟前
每日 AI PM 情报 · 2026-08-31
大数据·人工智能
Talordata7 分钟前
從失控的價格爬蟲到可控的數據管線:一個跨境品牌數據團隊的重構手記
大数据·人工智能·ai·数据挖掘
chuntian_tester14 分钟前
测试中的提示词工程
人工智能·测试工具·ai
锋行天下30 分钟前
LangChain / LangGraph 生产环境错误处理
人工智能
鹏哥带你干乡墅37 分钟前
优选乡墅赋能培训平台如何帮助提升乡村建设?
大数据·人工智能·python
冬奇Lab40 分钟前
一天一个开源项目(第209篇):holaOS - Agent 原生的本地工作台
人工智能·开源·agent
江畔柳前堤40 分钟前
前台·中台·后台:2026年AI原生时代的架构全景图
开发语言·人工智能·算法·机器学习·架构·scala·ai-native
AI服务老曹43 分钟前
模型版本管理完整流程:景区文旅项目从0到1怎么做
大数据·人工智能