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

OpenCV CUDA模块图像处理------创建一个模板匹配(Template Matching)对象函数createTemplateMatching()

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

算法描述

创建一个用于在 GPU 上执行模板匹配的 TemplateMatching 对象。

该函数返回一个指向 TemplateMatching 的智能指针(Ptr),可以使用它调用 .match() 方法对图像和模板进行匹配。

函数原型

Ptr<TemplateMatching> cv::cuda::createTemplateMatching
(int  	srcType,int  	method,Size  	user_block_size = Size() 
) 		

参数

  • srcType 输入图像的数据类型。目前支持 CV_32F 和 CV_8U 深度的图像(通道数为 1 到 4)。
  • method 指定将模板与图像进行比较的方式(即匹配方法)。
  • user_block_size 你可以通过 user_block_size 字段来设置特定的块大小。如果你使用默认值 Size(0, 0),则会自动估算块大小(该方式以速度优化为目标)。通过调整 user_block_size,你可以在牺牲速度的前提下减少内存占用。

当前对 CV_8U 深度图像支持的匹配方法包括:

  • CV_TM_SQDIFF
  • CV_TM_SQDIFF_NORMED
  • CV_TM_CCORR
  • CV_TM_CCORR_NORMED
  • CV_TM_CCOEFF
  • CV_TM_CCOEFF_NORMED

当前对 CV_32F 深度图像支持的匹配方法包括:

  • CV_TM_SQDIFF
  • CV_TM_CCORR

代码示例

#include <opencv2/cudaimgproc.hpp>
#include <opencv2/opencv.hpp>int main()
{// Step 1: 读取图像和模板cv::Mat h_src      = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/stich1.png", cv::IMREAD_GRAYSCALE );cv::Mat h_template = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/template.jpg", cv::IMREAD_GRAYSCALE );if ( h_src.empty() || h_template.empty() ){std::cerr << "Failed to load image or template!" << std::endl;return -1;}// Step 2: 图像上传到 GPUcv::cuda::GpuMat d_src, d_template, d_result;d_src.upload( h_src );d_template.upload( h_template );// Step 3: 创建模板匹配器int srcType = h_src.type();          // CV_8UC1int method  = cv::TM_CCOEFF_NORMED;  // 匹配方法cv::Size block_size;                 // 使用默认 block sizecv::Ptr< cv::cuda::TemplateMatching > matcher = cv::cuda::createTemplateMatching( srcType, method, block_size );// Step 4: 执行模板匹配matcher->match( d_src, d_template, d_result );// Step 5: 下载结果并显示cv::Mat h_result;d_result.download( h_result );cv::imshow( "Source Image", h_src );cv::imshow( "Template", h_template );cv::imshow( "Match Result", h_result );cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述
正确运行后,h_result 是一个灰度图像,其中:

  • 每个像素值表示模板与该位置的匹配程度;
  • 越亮的区域(接近 255 或 1.0)表示匹配越好;
  • 越暗的区域(接近 0)表示匹配较差;
http://www.lqws.cn/news/131059.html

相关文章:

  • Fullstack 面试复习笔记:Java 基础语法 / 核心特性体系化总结
  • python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
  • x86 汇编逻辑运算全解析:从【位操作】到实际应用(AND,OR,NOT,XOR,TEST)
  • 基于Gemini 2.5 Pro打造的AI智能体CanvasX上线,绘制常见图表(折线图、柱状图等),国内直接使用
  • 如何从零开始建设一个网站?
  • 【计算机网络】HTTPS
  • 网络各类型(BMA,NBMA,P2P)
  • 信息学奥赛一本通 1569:【 例 1】石子合并 | 洛谷 P1880 [NOI1995] 石子合并
  • 【网络安全】漏洞分析:阿帕奇漏洞学习
  • Java观察者模式深度解析:构建松耦合事件驱动系统的艺术
  • OffSec 基础实践课程助力美国海岸警卫队学院网络团队革新训练
  • ArcGIS计算多个栅格数据的平均栅格
  • 行为型-模板模式
  • 将word文件转为kindle可识别的azw3文件的方法
  • 【Qt开发】文件
  • React---扩展补充
  • Flink进阶之路:解锁大数据处理新境界
  • React组件基础
  • 探索分布式存储与通信:去中心化共享及通訊(DSAC)
  • NER实践总结,记录一下自己实践遇到的各种问题。
  • 【python深度学习】Day 44 预训练模型
  • STM32学习之看门狗(理论篇)
  • OA工程自动化办公系统 – 免费Java源码
  • HTTP(超文本传输协议)详解
  • Linux命令:shell脚本文件名全局替换
  • 好坏质检二分类MLP 实战
  • 数字人技术的核心:AI与动作捕捉的双引擎驱动(210)
  • 网络安全中网络诈骗的攻防博弈
  • Flutter快速上手,入门教程
  • OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()