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

opencv#27模板匹配

图像模板匹配原理

     例如给定一张图片,如上图大矩阵所示,然后给定一张模板图像,如上图小矩阵。

     我们在大图像中去搜索与小图像中相同的部分或者是最为相似的内容。比如我们在图像中以灰色区域给出一个与模板图像尺寸大小一致的区域,通过比较灰色区域中的内容与模板中的内容,两者如果一致,那么则认定两者是相似的,从而实现了在目标图像中寻找模板图像的匹配过程,若两者不一致,比如上图阴影区域中第一个像素值为3,而模板中第一个像素值为4,那么两者之间存在差距,通过每一个对应像素之间进行一次度量计算作为模板匹配中的匹配系数(度量矩阵),之后移动图像中的阴影区域(一次移动一个像素,从左往右,从上往下),再次对阴影区域所对应的像素值与模板中的像素进行度量计算得到模板匹配系数,每移动一次阴影区域就可以得到一个模板匹配系数,之后寻找这个系数所代表的匹配的最佳结果的位置即为最终的匹配结果(相似程度最高)。

    如上图所示用TM_CCORR_NORMED方法处理后的result为度量矩阵(即匹配系数),最白的位置代表最高的匹配系数,以系数最佳(最大或者最小,看你用什么算法)为顶点(即图像的左上角点,opencv中图像坐标原点为左上角点,y向下值越大,x向右值越大),做一个长宽和模板图像一样大小的矩形框,即为最佳匹配的区域。

实际中我们可以使用函数minMaxLoc来定位矩阵R中的最大值(最小值)。

图像模板匹配函数

matchTenplate()

vodi cv::matchTemplate(InputArray  image,InputArray  templ,OutputArray result,int         method,InputArray  mask = noArray())

·image:待模板匹配的原图像,图像数据类型为CV_8U和CV_32F两者之一。

·templ:模板图像,需要与image具有相同的数据类型,但是尺寸不能大于image。

·result:模板匹配结果输出图像,图像数据类型为CV_32F。如果image的尺寸为W*H,模板图像尺寸为w*h,则输出图像的尺寸为(W-w+1) * (H-h+1)。

·method:模板匹配方法标志。

·mask:匹配模板的掩码,必须与模板图像具有相同的数据类型和尺寸,默认情况下不设置,目前仅支持在TM_SQDIFF和TM_CCORR_NORMED这两种匹配方法时使用。

图像模板匹配方法标志

·平方差匹配TM_SQDIFF:

最好匹配为0,匹配程度越低,值越大。

·标准平方差匹配TM_SQDIFF_NORMED:

·相关匹配TM_CCORR:

此类方法采用模板与图像间的乘法操作,所以较大的数表示匹配程度高,0表示最差的匹配效果。

·标准相关匹配TM_CCORR_NORMED:

·系数匹配TM_CCOEFF:

此类方法将模板对其均值的相对值与图像对其均值的相对值进行匹配,1表示完美匹配,-1表示糟糕匹配,0表示没有任何相关性(随机序列)。

·标准系数匹配:TM_CCOEFF_NORMED:

随着从简单的测量(平方差)到更复杂的测量(相关系数),我们可获得越来越准确的匹配(也意味着越来越大的计算代价),最好的办法是对所有这些设置多做一些测试实验,以便为自己的应用选择同时兼顾速度和精度的最佳方案。

示例:
#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv; //opencv的命名空间
using namespace std;//主函数
int main()
{Mat img = imread("E:/opencv/opencv-4.6.0-vc14_vc15/opencv/lenac.png");Mat temp = imread("E:/opencv/opencv-4.6.0-vc14_vc15/opencv/lena_face.png");//模板图像Mat result; //匹配结果matchTemplate(img, temp, result, TM_CCOEFF_NORMED);//模板匹配函数double maxval, minval;Point maxLoc, minLoc;minMaxLoc(result, &minval, &maxval, &minLoc, &maxLoc);//最大值最小值寻找函数//然后我们在图像中找到最大值的位置,绘制出匹配成功的区域,就能够在图像中看到最佳匹配的结果rectangle(img, Point(maxLoc.x, maxLoc.y), Point(maxLoc.x + temp.cols, maxLoc.y + temp.rows), Scalar(0, 0, 255), 2);//矩形框绘制
circle(img, Point(maxLoc.x, maxLoc.y), 1, Scalar(255, 0, 120), 30); //最大值点的位置imshow("原图像", img);imshow("模板图像", temp);imshow("result", result);waitKey(0);//等待函数用于显示图像return 0;}

相关文章:

opencv#27模板匹配

图像模板匹配原理 例如给定一张图片&#xff0c;如上图大矩阵所示&#xff0c;然后给定一张模板图像&#xff0c;如上图小矩阵。 我们在大图像中去搜索与小图像中相同的部分或者是最为相似的内容。比如我们在图像中以灰色区域给出一个与模板图像尺寸大小一致的区域&#xff0c;…...

【论文阅读笔记】Swin-Unet: Unet-like Pure Transformer for Medical Image Segmentation

1.介绍 Swin-Unet: Unet-like Pure Transformer for Medical Image Segmentation Swin-Unet&#xff1a;用于医学图像分割的类Unet纯Transformer 2022年发表在 Computer Vision – ECCV 2022 Workshops Paper Code 2.摘要 在过去的几年里&#xff0c;卷积神经网络&#xff…...

IS-IS:01 ISIS基本配置

这是实验拓扑&#xff0c;下面是基本配置&#xff1a; R1: sys sysname R1 user-interface console 0 idle-timeout 0 0 int loop 0 ip add 1.1.1.1 24 int g0/0/0 ip add 192.168.12.1 24 qR2: sys sysname R2 user-interface console 0 idle-timeout 0 0 int loop 0 ip add …...

基于极限学习机的曲线分类,基于极限学习机的光谱分类,基于极限学习机的分类预测

目录 背影 极限学习机 基于极限学习机的曲线分类,基于极限学习机的光谱分类,基于极限学习机的分类预测 主要参数 MATLAB代码 效果图 结果分析 展望 完整代码下载链接:基于极限学习机的曲线分类,基于极限学习机的光谱分类,基于极限学习机的分类预测的MATLAB代码资源-CSDN…...

miniconda安装

Miniconda是一个小型版的Anaconda&#xff0c;它包含了一个包管理工具conda和Python。Miniconda适用于那些只需要管理Python包和环境&#xff0c;而不需要Anaconda中包含的大部分科学计算工具的用户。 Miniconda的安装过程相对简单。你可以从清华大学开源软件镜像站下载Minico…...

PHP判断访客是否手机端(移动端浏览器)访问的方法总结

PHP判断访客是否手机端、移动端、浏览器访问的方法总结 方法一&#xff1a;使用$_SERVER全局变量方法二&#xff1a;使用PHP的get_browser函数方法三&#xff1a;使用第三方库&#xff08;Mobile Detect&#xff09;方法四&#xff1a;使用WURFL设备数据库 方法一&#xff1a;使…...

vscode无法自动补全

前提&#xff1a;安装c/c插件 c/c插件功能非常强大&#xff0c;几乎能满足日常编码过程中常用的功能&#xff1b;因此也包含自动补全的功能&#xff0c;开启方法如下&#xff1a; 文件->首选项->设置&#xff1a; 扩展->c/c->Intellisense&#xff0c;找到Intell…...

深度学习记录--指数加权平均

指数加权移动平均(exponentially weighted moving averages) 如何对杂乱的数据进行拟合&#xff1f; 通过指数加权平均可以把数据图近似拟合成一条曲线 公式&#xff1a; 其中表示第t个平均数&#xff0c;表示第t-1个平均数&#xff0c;表示第t个数据&#xff0c;表示变化参数…...

如何生成图源二维码?

数据是GIS的血液。 自从苹果端与安卓端水经微图APP&#xff08;简称“微图APP”&#xff09;上线之后&#xff0c;有用户反馈图源比较少的问题。 其实&#xff0c;微图APP支持通过图源二维码添加自定义图源&#xff0c;而该二维码则可以通过微图Web版生成。 如何生成图源二维…...

PowerShell install 一键部署grafana

grafana 前言 Grafana 是一款开源的数据可视化和监控仪表盘工具。它提供了丰富的数据查询、可视化和报警功能,可用于实时监控、数据分析和故障排除等领域。 通过 Grafana,您可以连接到各种不同的数据源,包括时序数据库(如 Prometheus、InfluxDB)和关系型数据库(如 MySQ…...

笨蛋学设计模式行为型模式-解释器模式【23】

行为型模式-解释器模式 8.10解释器模式8.10.1概念8.10.2场景8.10.3优势 / 劣势8.10.4解释器模式可分为8.10.5解释器模式8.10.6实战8.10.6.1题目描述8.10.6.2输入描述8.10.6.3输出描述8.10.6.4代码 8.10.7总结 8.10解释器模式 8.10.1概念 ​ 解释器模式用于定义一个语言的文法…...

SAP ABAP SUBMIT常用用法

导语&#xff1a;一直对SUBMIT的用法模模糊糊&#xff0c;每次用都要去查询&#xff0c;本次痛下决心&#xff0c;腾出时间&#xff0c;梳理了一下&#xff0c;如果本文对你有帮助&#xff0c;点个赞再走&#xff5e; 之前分享过SUBMIT调用程序获取内表的值&#xff0c;就不重…...

GitLab备份与恢复测试(基于Docker)

GitLab环境准备 docker run --name gitlab \ -p 2022:22 -p 2080:80 -p 2443:443 -d \ -v /opt/gitlab/config:/etc/gitlab \ -v /opt/gitlab/gitlab/logs:/var/log/gitlab \ -v /opt/gitlab/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:16.2.1-ce.0备份 1.修改配置文件…...

android studio开发的一些问题

1、编译后&#xff0c;输出日志乱码 Help-->Edit Custom VM Options...-->-Dfile.encodingUTF-8 2、编译时&#xff0c;出现&#xff1a;connect timed out 试过很多方法啦&#xff0c;都是不行的。最后我自己摸索出方法。 [1]android studio-->Project-->Grad…...

辞职对于我来说,不可避免(10)

人,从有辞职的想法,再到把辞职出口要多久,一天、一星期还是一个月 “别以为我不知道你搞了什么小动作,以后别瞎搞,不然我不客气”,从老板说出来这句话开始,这家公司我注定不可能再待下去。 我很诧异,小蔡刚离职,公司干活的技术就我一个,况且我也没哪里得罪你,你冒出…...

【Java】--网络编程:基于TCP协议的网络通信

【Java】–网络编程&#xff1a;基于TCP协议的网络通信 文章目录 【Java】--网络编程&#xff1a;基于TCP协议的网络通信一、TCP协议1.1 概念1.2 三次握手1.2.1 文字描述1.2.2 画图演示 1.3 四次挥手1.3.1 文字描述1.3.2 画图演示 二、基于TCP的Socket网络编程2.1 概念2.2 服务…...

CMake+QT+大漠插件的桌面应用开发(QThread)

文章目录 CMakeQT大漠插件的桌面应用开发&#xff08;QThread&#xff09;简介环境项目结构配置编译环境代码 CMakeQT大漠插件的桌面应用开发&#xff08;QThread&#xff09; 简介 在CMakeQT大漠插件的桌面应用开发中已经给出了QT配合大漠插件开发桌面应用的样例 不过由于主…...

【笔记】Helm-3 主题-9 Helm高级技术

Helm高级技术 这部分解释说明了使用Helm的各种高级特性和技术。这部分旨在为Helm的高级用户提供高度自定义和操作chart及发布的信息。每个高级特性都会有它自己的权衡利弊&#xff0c; 因此每个使用它们的都要有Helm的深度知识并小心使用。或者换言之&#xff0c;谨记 Peter Pa…...

YOLOv5改进 | 主干篇 | 华为GhostnetV1一种移动端的专用特征提取网络

一、本文介绍 本文给大家带来的改进机制是华为移动端模型Ghostnetv1,华为GhostnetV1一种移动端的专用特征提取网络,旨在在计算资源有限的嵌入式设备上实现高性能的图像分类。GhostNet的关键思想在于通过引入Ghost模块,以较低的计算成本增加了特征图的数量,从而提高了模型的…...

特斯拉FSD的神经网络(Tesla 2022 AI Day)

这是特斯拉的全自动驾驶&#xff08;Full Self Driver&#xff09;技术结构图&#xff0c;图中把自动驾驶模型拆分出分成了几个依赖的模块&#xff1a; 技术底座&#xff1a;自动标注技术处理大量数据&#xff0c;仿真技术创造图片数据&#xff0c;大数据引擎进不断地更新&…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...