《OpenCV计算机视觉》—— 模板匹配

news2024/9/24 15:29:13

文章目录

  • 一、模板匹配简单介绍
  • 二、三个主要函数的介绍
    • 1.执行模板匹配函数-cv2.matchTemplate()
    • 2.查找最佳匹配函数-cv2.minMaxLoc()
    • 3.在原图上绘制匹配区域函数-cv2.rectangle()
  • 三、代码实现

一、模板匹配简单介绍

  • 在Python中,模板匹配是一种在图像中查找与给定模板最相似区域的技术。

  • 模板匹配的基本步骤包括:

    • 1.加载图像和模板:首先,你需要加载你想要搜索的图像(通常称为“原图”)和你想要匹配的模板图像。模板图像应该是原图中的一个较小部分。
    • 2.执行模板匹配:使用OpenCV的cv2.matchTemplate()函数在原图上滑动模板,并计算每个位置的匹配度。这个函数会返回一个矩阵,其中每个元素表示模板在原图对应位置上的匹配程度。
    • 3.查找最佳匹配:使用cv2.minMaxLoc()函数在匹配度矩阵中找到最大值(或最小值,取决于你使用的匹配方法)及其位置。这个位置就是模板在原图中最佳匹配的位置。
    • 4.在原图上绘制匹配区域:为了可视化结果,你可以在原图上绘制一个矩形来标记匹配到的区域。

二、三个主要函数的介绍

1.执行模板匹配函数-cv2.matchTemplate()

  • result = cv2.matchTemplate(image, template, method, mask=None)
  • 参数说明:
    • image:要在其中搜索模板的原图像。
    • template:要在原图中搜索的模板图像。它应该比原图小。
    • method:用于比较模板和原图的区域的匹配方法,OpenCV 提供了几种不同的方法:
      • TM_SQDIFF :平方差匹配法:该方法采用平方差来进行匹配;匹配越好,值越小;匹配越差,值越大。
      • TM_CCORR :相关匹配法:该方法采用乘法作;数值越大表明匹配程度越好。
      • TM_CCOEFF :相关系数匹配法:数值越大表明匹配程度越好。
      • TM_SQDIFF_NORMED :归一化平方差匹配法,匹配越好,值越小;匹配越差,值越大。
      • TM_CCORR_NORMED :归一化相关匹配法,数值越大表明匹配程度越好。
      • TM_CCOEFF_NORMED :归一化相关系数匹配法,数值越大表明匹配程度越好。
  • 返回值 result 是一个矩阵,其大小取决于原图和模板的大小以及使用的匹配方法。矩阵中的每个元素都表示模板在原图对应位置上的匹配程度。对于某些方法(如平方差匹配),值越小表示匹配程度越高;而对于其他方法(如相关匹配),值越大表示匹配程度越高。

2.查找最佳匹配函数-cv2.minMaxLoc()

  • minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(src, mask=None)

  • 参数说明:

    • src:输入的二维数组(如灰度图像或匹配结果矩阵)。
    • mask:一个与 src 相同大小的掩码图像,用于指定 src 中哪些区域应该被考虑(通常不用)。
  • 返回值:

    • minVal:数组中的最小值。
    • maxVal:数组中的最大值。
    • minLoc:最小值的坐标(一个二元组,(x, y))。
    • maxLoc:最大值的坐标(一个二元组,(x, y))。

3.在原图上绘制匹配区域函数-cv2.rectangle()

  • cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)

  • 参数说明:

    • img:要在其上绘制矩形的图像。这应该是一个单通道(灰度)图像或三通道(彩色)图像。
    • pt1:矩形的一个角的坐标,这是一个二元组(tuple),格式为 (x, y)。
    • pt2:矩形对角线上的另一个角的坐标,也是一个二元组,格式为 (x, y)。注意,这个对角线上的点不需要是矩形的右下角或右上角,它只需要与 pt1 形成对角线即可。
    • color:矩形的颜色。对于灰度图像,这是一个介于0(黑色)和255(白色)之间的标量。对于彩色图像,这是一个三元组,分别代表蓝色、绿色和红色的强度,值的范围也是从0到255。
    • thickness:线条的粗细(可选)。如果设置为 -1,则填充矩形。默认值是 1。
    • lineType:线条的类型(可选)。例如,cv2.LINE_8 表示8连接线,cv2.LINE_AA 表示抗锯齿线。如果未指定,则默认为 cv2.LINE_8。
    • shift:坐标点和线条粗细的小数位数(可选)。这个参数通常保持为默认值 0。
  • 返回绘制好的图片

三、代码实现

import cv2

# 读取原图和标签图
kele = cv2.imread('kele.png')
template = cv2.imread('template.png')
# 显示原图和标签图
cv2.imshow('kele', kele)
cv2.imshow('template', template)

# 进行模板匹配
res = cv2.matchTemplate(kele, template, cv2.TM_CCOEFF_NORMED)  # 返回匹配结果的矩阵

# 查找最佳匹配
# cv2.minMaxLoc可以获取矩阵中的最小值和最大值,以及最小值坐标和最大值坐标
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)  # 最佳匹配位置(数组)中的:最小值、最大值、最小值坐标、最大值坐标
top_left = max_loc  # 左上角点的坐标就是最大值位置的坐标
h, w = template.shape[:2]  # 获取标签图的高和宽
bottom_right = (top_left[0] + w, top_left[1] + h)  # 右下角点的坐标
# 绘制矩形
kele_template = cv2.rectangle(kele, top_left, bottom_right, (0, 255, 0), 2)

# 显示绘制后的原图
cv2.imshow('kele_template', kele_template)

# 等待任意键按下后关闭所有窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 结果如下
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2105177.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录一下blender烘焙贴图黑边的一个坑

首先是拆UV这里 margin 0.1 better share better 这个也大一点好了 这样烘焙的猴头就是正常的 这里的坑点是 降噪!!烘焙如果开启降噪 如果关闭下面那一个 会好一点,都关闭了,才是最上面的效果

2024全国大学生数学建模国赛评审细则

2024全国大学生数学建模国赛评审细则 —参考2023年全国大学生数学建模竞赛C题评阅细则 评分体系阅览 —分值结果仅供参考 80分:稳国一; 65分:达国奖门槛(70分更为稳妥); 60至50分:有望获省…

整形提升-C语言

整型提升的原则:当一个小字节数,向大字节数转换时,有符号补0或1,无符号补0; 为什么会发生测试结果呢,让我们来看一下 在64位的环境中char是1个字节8位 char a1; 1000 0001 原码 整形提升 111…

网恋照妖镜源码搭建教程

文章目录 前言创建网站1.打开网站设置 配置ssl2.要打开强制HTTPS,用宝塔免费的ssl证书即可,也可以使用其他证书,必须是与域名匹配的3.上传文件至根目录进行解压4.解压后,修改文件 sc.php 里面的内容5.其余探索 前言 前俩年很火的…

ComfyUI中IC-Light节点的Detail Transfer节点参数测试

🎆背景 ic-light是一个能重绘画面光影的节点,但是在重绘的过程中,难免会将图像本身的细节进行重绘,尤其是在电商的场景中,文字和商品的细节很多时候会被重绘的乱七八糟。 针对这种情况,Comfyui-IC-Light节…

Elasticsearch的Restful风格API

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 1、Restful及JSON格式 RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用 XML 格式定义或 JSON 格式定义。R…

串行总线舵机

项目需求: 直接旋转:总体旋转角度方向 微调:步进模式/闭环电机模式 需要考虑受力之类的吗 初选方案: 只改写底层,然后引入官方驱动,通过各种函数 5、舵机如何实现在机械臂夹具中使用。 仅限夹取相同物…

开发台球助教小程序前景分析

开发台球助教小程序的前景分析可从以下维度展开探讨: 市场需求的增长 台球作为一项受欢迎的休闲运动,其爱好者群体正在扩大。随着大众对这项运动兴趣的增加,寻求系统化培训的需求也愈发明显。台球助教小程序正好填补了这一市场空白&#xf…

学习大数据DAY49 考后练习题

前几天在考帆软,考完后还有周末大礼包。 Oracle 上机练习 --第一题 create table 客户交易情况 ( 客户号 varchar2(5), 交易时间 varchar2(20),交易金额 number(5) ); --表中内容手动录入 select dense_rank()over(order by ascii(客户号)) as 序号 1,客户号, den…

MySQL插入更新死锁问题解析

文章目录 1 问题背景2 线上问题2.1 线上异常日志2.2 数据准备2.3 问题复现2.3.1 执行流程2.3.2 死锁排查 2.3.3 死锁日志分析2.3.3.1 事务A23087信息2.3.3.2 事务23087持有锁2.3.3.3 事务23087等待锁2.3.3.4 事务23088信息2.3.3.5 事务23088持有锁2.3.3.6 事务23088等待锁 3 分…

python进阶篇-day05-网络编程(TCP)与进程

day05网络编程 一. 网编三要素 ip 概述 设备(电脑, 手机, IPad, 耳机...)在网络中的唯一标识. 分类 按照 代数 划分: IPv4: 4字节, 十进制来表示, 例如: 192.168.13.157 IPv6: 8字节, 十六进制来表示, 理论上来讲, 可以让地球上的每一粒沙子都有自己的IP. Ipv4 常用类别划…

同三维S61-20SDI 20倍 HDMI SDI USB3.0 网口 3高清摄像机

同三维S61-20SDI 高清摄像机 20倍光学变焦, HDMI/SDI/USB3.0/网口,3.5音频口输入,350万像素 索尼机芯,支持POE,NDI HX2/Full NDI(可定制) 两款: S61-20SDI (不支持NDI) 单价&#…

1分钟 快速掌握 双向信号(inout信号)

​在数字电路设计中,三态门扮演着至关重要的角色。它是Verilog硬件描述语言中的一个基本元素,用于实现复杂电路的设计与模拟。 今天,我们一起来探讨三态门的基本原理、在Verilog中的实现方式。 一、什么是三态门? 三态门,简单…

fpga图像处理实战-边缘检测 (Roberts算子)

Roberts算子 Roberts算子是一种用于边缘检测的算子,主要用于图像处理中检测图像的边缘。它是最早的边缘检测算法之一,以其计算简单、速度快而著称。Roberts算子通过计算图像像素在对角方向的梯度来检测边缘,从而突出图像中灰度变化最剧烈的部分。 原理 Roberts算子通过…

力扣刷题(4)

正则表达式匹配 正则表达式匹配-力扣 思路来源:ithewei 若 *p 为空,*s 为空则匹配,*s 为非空则不匹配;当 *s为非空时,*p *s || *p ‘.’ 时第一个字符匹配;若 *(p1) ! ’ * 时,则递归判断…

python开发VTK入门

首先用pip命令安装VTK的python库; 需要一些时间,安装完成如下; 基本示例代码, import vtkcube vtk.vtkCubeSource() cube.SetXLength(100.0) cube.SetYLength(200.0) cube.SetZLength(300.0)mapper vtk.vtkPolyDataMapper() ma…

25届计算机毕业设计:3步打造北部湾助农平台,Java SpringBoot实践

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

《OpenCV计算机视觉》—— 图像轮廓检测与绘制

文章目录 一、轮廓的检测二、轮廓的绘制图像轮廓检测与绘制的代码实现 三、轮廓的近似 一、轮廓的检测 轮廓检测是指在包含目标和背景的数字图像中,忽略背景和目标内部的纹理以及噪声干扰的影响,采用一定的技术和方法来实现目标轮廓提取的过程注意:做轮…

探索Python中的Ellipsis:不仅仅是三个点

在Python 3.9中,Ellipsis 对象被赋予了一个新名称,即 ...,这使得它更容易输入和使用。这个变化是在Python 3.9版本中引入的,而不是3.1。这个变化的好处包括: 易用性:使用 ... 比输入 Ellipsis 更快&#xf…

第11讲 回环检测

1、理解回环检测的必要性 2、掌握基于词袋的外观式回环检测 3、通过DBoW3的实验,学习词袋模型的实际用途 1、概述 1.1 回环检测的意义 回环检测模块能够给出除了相邻帧的一些是个更加久远的约束。相机经过了同一个地方,采集了相似的数据。回环检测的关…