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";
}
相关推荐
北京耐用通信13 分钟前
告别“牵一发而动全身”:耐达讯自动化Profibus PA分线器为石化流量计网络构筑安全屏障
人工智能·网络协议·安全·自动化·信息与通信
ziwu14 分钟前
海洋生物识别系统【最新版】Python+TensorFlow+Vue3+Django+人工智能+深度学习+卷积神经网络算法
人工智能·深度学习·图像识别
luoganttcc40 分钟前
RoboTron-Drive:自动驾驶领域的全能多模态大模型
人工智能·机器学习·自动驾驶
向阳逐梦1 小时前
DC-DC Buck 电路(降压转换器)全面解析
人工智能·算法
xcLeigh1 小时前
AI的提示词专栏:“Prompt Chaining”把多个 Prompt 串联成工作流
人工智能·ai·prompt·提示词·工作流
是店小二呀1 小时前
AI模型练好了却传不出去?这两个工具帮你破局
人工智能
galaxylove1 小时前
Gartner发布2025年人工智能和网络安全技术成熟度曲线:网络安全领域对AI的期望值达到顶峰
人工智能·安全·web安全
galaxylove2 小时前
Gartner发布CISO人工智能安全指南:将AI安全治理融入所有网络安全治理体系
人工智能·安全·web安全
依米s2 小时前
2019年人工智能大会核心议题《智联世界无限可能》
人工智能·waic·人工智能大会