当前位置: 首页 > news >正文

OpenCV图像拼接(5)用于计算一组图像的特征点和描述符的函数computeImageFeatures()

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

算法描述

cv::detail::computeImageFeatures 是 OpenCV 中用于计算一组图像的特征点和描述符的函数,通常在图像拼接或类似的任务中使用。这个函数可以帮助简化处理多张图片时的特征提取过程。

函数原型

void cv::detail::computeImageFeatures 	
(
	 	const Ptr< Feature2D > &  	featuresFinder,
		InputArrayOfArrays  	images,
		std::vector< ImageFeatures > &  	features,
		InputArrayOfArrays  	masks = noArray() 
) 		

参数

  • featuresFinder: 一个指向特征检测器的智能指针(如 ORB, SIFT 等)。
  • images: 输入图像数组,可以是 std::vectorcv::Mat 或类似的结构。
  • features: 输出参数,存储每个输入图像的特征(包括关键点和描述符)。
  • masks: 可选参数,指定每个输入图像的掩码,用于限制特征点检测的区域,默认为 noArray() 表示不使用掩码。

代码示例

#include <opencv2/opencv.hpp>
#include <opencv2/stitching/detail/autocalib.hpp>
#include <opencv2/stitching/detail/util.hpp>

using namespace cv;
using namespace cv::detail;

int main()
{
    // 加载图像
    std::vector< Mat > imgs;
    imgs.push_back( imread( "/media/dingxin/data/study/OpenCV/sources/images/stich1.png" ) );
    imgs.push_back( imread( "/media/dingxin/data/study/OpenCV/sources/images/stich2.png" ) );

    if ( imgs[ 0 ].empty() || imgs[ 1 ].empty() )
    {
        std::cerr << "无法读取图像文件" << std::endl;
        return -1;
    }

    // 初始化特征检测器
    Ptr< Feature2D > feature_detector = ORB::create();

    // 存储计算出的特征
    std::vector< ImageFeatures > features( imgs.size() );

    // 计算特征
    computeImageFeatures( feature_detector, imgs, features );

    // 打印每张图的特征点数量作为验证
    for ( size_t i = 0; i < features.size(); ++i )
    {
        std::cout << "Image " << i + 1 << " keypoints: " << features[ i ].keypoints.size() << std::endl;
    }

    // 如果需要进一步处理这些特征,比如匹配等操作...

    return 0;
}

运行结果

Image 1 keypoints: 500
Image 2 keypoints: 500

相关文章:

  • Flutter小白零基础入门到高级项目实战全集
  • 移动笔试丨中国移动笔试2025届笔试考什么?运营商春招攻略、考点技巧|附真题秘籍、题型介绍、面试攻略、求职建议
  • pytorch小记(十一):pytorch中 `torch.nn.Dropout` 详解
  • Ranger 鉴权
  • Leetcode 刷题笔记1 图论part01
  • 【python小游戏】俄罗斯方块
  • 主流NoSQL数据库类型及选型分析
  • Redis客户端Jedis、Lettuce 和 Redisson优缺点总结
  • 【Linux———生产消费模型】
  • ubuntu20.04下的opencv4.8.0安装教程(其他版本通用)
  • git clone, 算是解决可以访问github但无法clone的问题
  • 动态规划合集——动态规划基本原理
  • Java JMX 未授权访问漏洞分析与修复指南
  • 云计算迁移革命:企业如何摆脱“单一云”锁定,构建自主云未来?
  • GPU 上的 Reduction(归约)和 Scan(前缀和)优化:LLVM、GPU 指令集与架构差异
  • 在线教育网站项目第四步:deepseek骗我, WSL2不能创建两个独立的Ubuntu,但我们能实现实例互访及外部访问
  • 全局上下文网络GCNet:创新架构提升视觉识别性能
  • mac calDAV 日历交互
  • 抖音视频数据获取实战:从API调用到热门内容挖掘
  • Android Studio控制台中文乱码解决方案
  • 早睡1小时,变化有多惊人?第一个就没想到
  • 跨海论汉|专访白馥兰:对中国农业史的兴趣,从翻译《齐民要术》开始
  • 原创话剧风向标!这个展演上《大宅门》《白鹿原》先后上演
  • 应勇:以法治力量服务黄河流域生态保护和高质量发展
  • 上海虹桥至福建三明直飞航线开通,飞行时间1小时40分
  • 从“高阶智驾”到“辅助驾驶”,上海车展上的“智驾”宣发变调