关于Python机器视觉OpenCV图片模板匹配

OpenCV(11):模板匹配实例讲解 在OpenCV中,模板匹配是一种图像处理技术,用于在一个大的图像中查找和定位一个小的目标图像(也称为模板)。通俗而言,就是通过一张图片找到和另一张图片相似的部分 阅读详情

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取

Python免费学习资料、代码以及交流解答点击即可加入


什么是模板匹配

简单来说模板匹配就是通过现有的模板去与图片进行比较找出图中所匹配的图像。

首先来看一下效果图:

 

 

左图是模板图片,中图是带测试的图片,右图是匹配的结果

程序将在“中图”中匹配“左图”的模板图片,如果中图中含有模板图片的话,则会在中图画出模板图片的位置(用蓝线圈出来)。

模板匹配原理:

模板匹配是一种用于在较大图像中搜索和查找模板图像位置的方法。为此,OpenCV带有一个函数cv2.matchTemplate()。它只是将模板图像滑动到输入图像上(就像在2D卷积中一样),然后在模板图像下比较模板和输入图像的补丁。OpenCV中实现了几种比较方法。(您可以检查文档以了解更多详细信息)。它返回一个灰度图像,其中每个像素表示该像素的邻域与模板匹配多少。

如果输入图像的大小(WxH)和模板图像的大小(wxh),则输出图像的大小将为(W-w + 1,H-h + 1)。获得结果后,可以使用cv2.minMaxLoc()函数查找最大/最小值在哪里。将其作为矩形的左上角,并以(w,h)作为矩形的宽度和高度。该矩形是您模板的区域。

目录:

1.前提
2.两种方法实现
3.后记

1.前提:

程序运行之前先安装一下相关的库


cv2
imutils

报错1:


ModuleNotFoundError: No module named 'cv2' (安装cv2)

说明缺少opencv库
在命令提示符窗口中,执行下面的命令:


pip install opencv-python

如果觉得下载过慢的可以执行下面的命令:(使用了豆瓣源下载,结果和上面是一样的,只不过这个命令安装快一些)


pip install -i https://pypi.doubanio.com/simple/ opencv-python

两种方法实现:

第一次方法:图像模板匹配(最简单)

模板匹配和卷积原理很像,模板在原图像上从原点开始滑动,计算模板与(图像被模板覆盖的地方)的差别程度,这个差别程度的计算方法在OpenCV里有6种,然后将每次的结果放入一个矩阵里,作为结果输出。假如原图形是AXB大小,而模板是axb大小,则输出结果的矩阵是(A-a+1)x(B-b+1)

代码:

#模板匹配
import numpy as np
import cv2

def cv_show(name,image):
  cv2.imshow(name,image)
  cv2.waitKey(0)
  cv2.destroyAllWindows()

img = cv2.imread("source.jpg")
template = cv2.imread("m.jpg")


# 转换为灰度图片
gray1 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 读取测试图片并将其转化为灰度图片
gray2 = cv2.cvtColor(template,cv2.COLOR_BGR2GRAY)
h,w = template.shape[:2]
#匹配
#TM_SQDIFF  匹配方法,归一化的方法更好用
res = cv2.matchTemplate(gray1,gray2,cv2.TM_SQDIFF)
#得到极值坐标
min_val,max_val,min_loc,max_loc = cv2.minMaxLoc(res)
top_left = min_loc
bottom_right = (top_left[0]+w,top_left[1]+h)
#画出标记点
cv2.rectangle(img,top_left,bottom_right,255,2)
cv_show("img",img)

运行结果:

 

第二种方法:多尺度模板匹配

多尺度模板匹配实现步骤

  • 步骤1-读取模板图片,并依次执行灰度化和边缘检测处理;
  • 步骤2-读取测试图片,遍历整个尺度空间,进行图片裁剪;
  • 步骤3-依次执行边缘检测和模板匹配,获取到外接矩形;
  • 步骤4-根据结果对测试图片中模板所在的位置进行更新;
  • 步骤5-首先进行位置转换,然后绘制矩形框,最后显示结果。

代码实现:

# coding=utf-8
# 导入python包
import numpy as np
import imutils
import cv2

# 读取模板图片
template = cv2.imread("m.jpg")
# 转换为灰度图片
template = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
# 读取测试图片并将其转化为灰度图片
image = cv2.imread('source.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 执行边缘检测
template = cv2.Canny(template, 50, 200)
(tH, tW) = template.shape[:2]
# 显示模板
#cv2.imshow("Template", template)


found = None

# 循环遍历不同的尺度
for scale in np.linspace(0.2, 1.0, 20)[::-1]:
  # 根据尺度大小对输入图片进行裁剪
  resized = imutils.resize(gray, width = int(gray.shape[1] * scale))
  r = gray.shape[1] / float(resized.shape[1])

  # 如果裁剪之后的图片小于模板的大小直接退出
  if resized.shape[0] < tH or resized.shape[1] < tW:
    break

  # 首先进行边缘检测,然后执行模板检测,接着获取最小外接矩形
  edged = cv2.Canny(resized, 50, 200)
    #匹配
    #TM_SQDIFF  匹配方法,归一化的方法更好用
  result = cv2.matchTemplate(edged, template, cv2.TM_CCOEFF)
  (_, maxVal, _, maxLoc) = cv2.minMaxLoc(result)

  # 结果可视化
  # 绘制矩形框并显示结果
  clone = np.dstack([edged, edged, edged])
  cv2.rectangle(clone, (maxLoc[0], maxLoc[1]), (maxLoc[0] + tW, maxLoc[1] + tH), (0, 0, 255), 2)
  #cv2.imshow("Visualize", clone)
  #cv2.waitKey(0)

  # 如果发现一个新的关联值则进行更新
  if found is None or maxVal > found[0]:
    found = (maxVal, maxLoc, r)

# 计算测试图片中模板所在的具体位置,即左上角和右下角的坐标值,并乘上对应的裁剪因子
(_, maxLoc, r) = found
(startX, startY) = (int(maxLoc[0] * r), int(maxLoc[1] * r))
(endX, endY) = (int((maxLoc[0] + tW) * r), int((maxLoc[1] + tH) * r))

# 绘制并显示结果
cv2.rectangle(image, (startX, startY), (endX, endY), (0, 0, 255), 2)
cv2.imshow("Image", image)
cv2.waitKey(0)

运行结果:

 

3.后记:

如果大家学会这种技术之后,再稍微改进一下,弄错一个小脚本,这样下次玩开心消消乐的那可以直接无敌了,再也不用担心找不到匹配的小方块了,哈哈哈哈。

在集体照的茫茫人海中,你还怕我找不到你???通过模板匹配,直接定位你的位置!

python批量实现模板匹配处理,并将图片进行标记和裁剪保存 批量进行图片的模板匹配,并进行图片的裁剪和保存 阅读详情

相关推荐

交通标志定位与识别python和opencv

最近在用python和opencv做交通标志的定位和检测,本案例只能检测出限速标志的交通标志,第一次写博客,写的不好请见谅. 博主也是刚刚接触机器视觉的学习,后期会继续发布一些这方面的内容,希望我们可以互相学习,共同进步, 先说一下代码的运行效果吧 这里是一张图片的原图和运行以后的结果 1.导入需要模块,先创建一个变量a后面会用到 import cv2 as cv import numpy as np import os a=0 2,加载图片 src=cv.imread('tim.jpg') 3,

qq_45087786的博客 9141

「找一找」考你眼力的时候到了!

机器视觉OpenCV图片模板匹配养成好习惯:文中文末小广告帮忙点一点什么是模板匹配简单来说模板匹配就是通过现有的模板去与图片进行比较找出图中所匹配的图像。首先来看一下效果图:左图是模板图...

公众号:Python研究者 655

OpenCV模板匹配实战:从零实现机器视觉定位,避开新手必踩的坑

在计算机视觉领域,定位是许多高级任务(如测量、识别、引导)的基石。其核心原理在于让计算机像人眼一样,在图像中寻找并确定特定目标的位置。模板匹配技术通过滑动窗口计算图像区域相似度,是实现这一目标最直观、高效的方法之一,尤其适合工业场景下背景稳定、目标形态固定的应用。相较于深度学习,模板匹配无需训练数据,原理透明,能快速验证方案可行性,是初学者理解视觉定位底层逻辑的理想切入点。本文以OpenCV为工具,结合Python环境搭建、算法选型、多目标处理和参数调优等工程实践,详细解析如何构建一个鲁棒的二维视觉定位系统

350

【OpenCV--模板匹配】

模板匹配就是在给定的图片中,查找和模板最相似的区域,算法的输入包括模板和图片,通过不断移动模板图片,计算其与图片对应区域匹配度,将匹配度最高区域选择为最终结果。

m0_70964767的博客 1万+

身份证信息识别 基于tesseract4.0 + opencv + Python

身份证信息识别 基于tesseract4.0 + opencv + Python tessreact4.0介绍及安装opencv安装身份证信息识别的实现批量读取身份证图片SIFT算法进行特征点匹配模板匹配算法二值化,降噪文字识别 本人最近开始做有关ocr的项目,具体要做的是身份证信息识别,所以我决定使用tesseract+opencv+Python来实现这个工作. tessreact4.0介绍及...

baidu_33473810的博客 8629

机器视觉OpenCV:霍夫变换

机器视觉OpenCV:霍夫变换;霍夫变换原理;霍夫线检测;霍夫圆检测;模板匹配

天涯雨的博客 840

【机器视觉】OpenCV-Python 图像的模板匹配和霍夫变换

1.模板匹配

知不足而奋进,望远山而前行 2万+

工业级机器视觉检测系统实战:Python+OpenCV从算法到部署全流程

机器视觉作为工业自动化的核心技术,通过图像采集、处理与分析,实现对产品质量的自动化检测与测量。其核心原理在于利用计算机模拟人类视觉功能,从数字图像中提取信息并做出决策。这项技术的价值在于能够大幅提升生产效率和一致性,降低人工成本,是实现智能制造的关键环节。在工业场景中,机器视觉广泛应用于尺寸测量、缺陷识别、定位引导等。本文聚焦于如何构建一个稳定、可靠的工业级视觉检测系统,深入探讨了基于Python和OpenCV的插件化流水线架构设计,并详细解析了从图像采集、预处理到特征提取的核心算法实现,为工程师应对复杂工

weixin_34081595的博客 349

基于金字塔的模板匹配算法(python)

今天完成了机器视觉的课程作业-基于金字塔的模板匹配算法,就顺便记录一下。本次作业我是通过python+opencv来完成的。这个作业就是一个模板匹配算法的基础上加一个金字塔的模型来减少计算量,所谓金字塔就是对图片进行向下采样,每向下采样一次,图像就缩小一半,由此减少了计算的量。 原图和模板图: 运行代码: import cv2 import numpy as np def get_img(): source_img = cv2.imread("source_img.jpg") temp

i_actor的博客 2254

多尺度模板匹配(openCV实现find_scaled_shape_model)

多尺度模板匹配,基于形状的模板匹配

manuoo的专栏 6506

如何设计QR反激变换器

摘要:本文分析了基于GaN技术的PD适配器市场现状,重点探讨了准谐振反激变换器(QR Flyback)的工作原理及设计方法。文章首先介绍了反激变换器的三种工作模式(CCM、DCM、CRM/QR)及其特点,指出QR模式通过谷底开通技术能显著降低开关损耗。随后以65W适配器为例,详细阐述了变压器参数设计流程,包括匝比确定、原边电感计算和绕组匝数设计等关键步骤。文章强调QR反激变换器凭借高效率、小体积和低成本优势,已成为20W-65W PD适配器的主流拓扑方案,配合GaN技术进一步提升了功率密度和便携性。

m0_62868254的博客 1496

OpenCV-Python学习笔记(十五):模板匹配(Template Matching)

目标 在本节我们要学习: 1. 使用模板匹配在一幅图像中查找目标 2. 函数: cv2.matchTemplate(), cv2.minMaxLoc() 原理模板匹配是用来在一副大图中搜寻查找模版图像位置的方法。 OpenCV 为我们提供了函数: cv2.matchTemplate()。和 2D 卷积一样,它也是用模板图像在输入图像(大图)上滑动,并在每一个位置对模板图像和与其对应的输入图像的子...

GiffordY的博客 4341

拉普拉斯矩阵

1、预备知识 拉普拉斯矩阵定义为:L=D-W。其中,D为度矩阵,W为权重矩阵。 (1)D是对角矩阵,对角线上的元素时节点的度,即所有与该节点相关联的边的权重之和;对角线以外的元素为0。有向图的对角矩阵分为 出度矩阵 和 入度矩阵。 图1.1 无向图中的度矩阵 (2)W在无向图中是对称矩阵,在有向图中是非对称矩阵。 ...

zzhe 1万+

OpenCV笔记24:在Python中使用OpenCV进行模板匹配

1、学习目标 如何使用OpenCV Python进行模板匹配。 模板匹配是一种在较大图像中搜索和查找模板图像位置的方法。 2、使用的函数方法 cv.matchTemplate() template.shape[::-1] np.where() 3、程序 import cv2 import numpy as np img = cv2.imread("messi5.jpg") grey_img = c...

weixin_41788560的博客 933

ESP32-S3射频测试与全球认证全栈实践指南

功率谱密度(PSD)和发射功率等级是无线通信设备射频合规的核心基础概念,其物理层原理直接决定自适应测试、阻塞容限及多国认证的通过路径。PSD ≥10 dBm/MHz触发强制性自适应测试,需验证LBT机制与跳频鲁棒性;而16级可编程发射功率等级(-24 dBm至+20 dBm)则为功耗、覆盖与法规平衡提供工程调控维度。该能力广泛应用于低功耗蓝牙IoT终端、智能家居网关及工业无线传感器等场景,尤其在ESP32-S3平台中,需结合eFuse校准、Sigma工具链与QuickTrack认证策略实现从实验室调试到量产

weixin_34945060的博客 288

Matlab:imageDatastore() 高效读取图像数据集的实战技巧

本文详细介绍了Matlab中imageDatastore()函数的高效使用技巧,帮助用户从繁琐的手动读取图像数据集中解放出来。通过核心语法、关键参数(如IncludeSubfolders、LabelSource、ReadSize)的解析,以及数据集分割、打乱等进阶实战操作,指导读者构建稳定、高效的图像数据读取管道,特别适用于大型图像数据集处理和机器学习项目。

hill8的博客 1100

Python 机器视觉 - 基于opencv图像模板匹配实现的简单人脸匹配实例演示,matchTemplate的6大模板匹配算法

OpenCV 图像匹配算法 第一章:图像模板匹配演示 ① 效果展示1 ② 效果展示2 ③ 实现源码 第二章:六大模板匹配算法 ① CV_TM_SQDIFF【平方差匹配】 ② CV_TM_SQDIFF_NORMED【标准平方差匹配】 ③ CV_TM_CCORR【相关匹配】 ④ CV_TM_CCORR_NORMED【标准相关匹配】 ⑤ CV_TM_CCOEFF【相关系数匹配】 ⑥ CV_TM_CCOEFF_NORMED【标准相关系数匹配】

小蓝枣的博客 4919

SPI 总线信号完整性与时序一致性测试

SPI总线测试的核心目标是验证其电气与时序行为是否满足芯片规格要求,确保通信可靠性

硬核科技 329

小杰机器视觉(six)——模板匹配

超光速引擎的轰鸣,是人类向宇宙深处进军的号角,穿越无尽星河,去叩响未知文明的大门。

2501_92101354的博客 1521

在 Linux 64 位上遭遇 Signal 7 与 ST22 SYSTEM_CORE_DUMPED:从 es/implementation=std 到 /dev/shm 的一套落地排查法

摘要: Linux 64位SAP系统出现SYSTEM_CORE_DUMPED和Signal 7(对应SIGBUS)错误时,核心问题是进程因共享内存资源异常被操作系统强制终止。主要诱因包括:1)/dev/shm的tmpfs默认容量不足(通常仅占物理内存50%);2)SAP内存管理参数es/implementation=map在64位场景下的敏感性。解决方案应双管齐下:在实例profile设置es/implementation=std以降低对tmpfs的依赖,同时按(RAM+Swap)*75%重新配置/dev/

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 164

RFC 字符码转换深度解析:Unicode、非 Unicode 与 MDMP 系统的协奏

老版本 MDMP 系统不上传自定义映射时,Unicode 端会落回“预配置列表”。列表里可见西欧 1100、日文 8000、中文 8400 等经典编号。若需强制覆写映射,可在 SM59 ➡Unicode页签启用,或直接勾选作为兜底。字符编码问题常“潜伏”多年,一旦旧系统升级或新增语种便集中爆发。掌握 RFC code page 转换机理、灵活运用 SM59 选项、在早期对 LANG 字段和字段长度进行治理,是根治乱码与 short dump 的关键。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 224

【实战】python以及opencv实现信用卡的数字识别

本项目利用python以及opencv实现信用卡的数字识别 前期准备 导入工具包 定义功能函数 模板图像处理 读取模板图像 cv2.imread(img) 灰度化处理 cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 二值化 cv2.threshold() 轮廓 - 轮廓 信用卡图像处理 读取信用卡图像 cv2.imread(img) 灰度化处理 cv2.c...

Mind_programmonkey的博客 7179

2026年复旦微电数字IC笔试试卷带答案解析

摘要: 本文为复旦微电子MCU/SOC岗位笔试模拟题,涵盖单片机架构、数字电路、存储技术等核心知识点。内容包括: 单选题(30分):考察Cortex-M中断机制、时序分析(建立/保持时间)、逻辑化简、跨时钟域设计(格雷码应用)、存储器特性(NAND Flash操作单元)等; 波形分析(15分):聚焦D触发器行为、时钟分频、建立时间违例判断及跨时钟域同步; 多选题(25分):涉及亚稳态成因与处理、异步FIFO设计要点、MCU低功耗策略、NAND Flash特性及复旦微电市场地位; 简答题(20分):解析建立/

Open 344

python机器视觉算法_python+opencv实现机器视觉基础技术(边缘提取,图像滤波,边缘检测算子,投影,车牌字符分割)...

机器视觉是人工智能正在快速发展的一个分支。简单说来,机器视觉就是用机器代替人眼来做测量和判断。它是一项综合技术,包括图像处理、机械工程技术、控制、电光源照明、光学成像、传感器、模拟与数字视频技术、计算机软硬件技术(图像增强和分析算法、图像卡、 I/O卡等)。下面介绍一些机器视觉的基础方法,用到的技术是python+opencv。python是一种很方便的高级编程语言,代码量少,而OpenCV是一个...

weixin_39769740的博客 1701

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

OpenCV图像处理应用(面向Python)之模板匹配与霍夫变换

OpenCV图像处理应用(面向Python)欢迎来到梁老湿课堂模板匹配的概念 欢迎来到梁老湿课堂 无数的第一次造就了你,生命就像一辆十段变速的单车,大部分的人只用到低速档。你应该尝试新事物,先从小冒险做起,充分发挥自己的潜能,同时不忘赞美自己的勇气。(本次课程素材都来源于我的专业课老师小傅,他的课形象生动,他所掌握的知识点犹如大海一般,他最擅长用简单、通俗易懂的语言让我们记住知识点。我只是一个搬运工、打工人。我只是站在他的肩膀上发文章!) 模板匹配的概念 模板匹配就是在大图中找小图,也就是说在一幅图像中寻找

weixin_52272597的博客 534

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Python OpenCV 图像处理:模板匹配(Template Matching)详解

本文介绍了OpenCV中模板匹配的原理与应用。模板匹配通过在待检测图像中滑动模板进行相似度计算,定位目标位置,适用于工业检测等固定场景。文章详细解析了六种匹配方法(如TM_SQDIFF、TM_CCOEFF_NORMED等)的特点及适用场景,并提供了完整的Python实现代码,包括单目标和多目标匹配。虽然模板匹配具有速度快、实现简单等优势,但对旋转、尺度变化敏感。在工业视觉中,它常与预处理技术结合,用于PCB检测、零件定位等任务,是机器视觉领域的重要基础算法。

m0_61749394的博客 539

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: Python爬取热映电影,以『可视化及词云秀』方式带你了解热映电影
下一篇: 爬取淘宝热卖商品并可视化分析,看看大家都喜欢买什么!
酸菜鱼编程
博客等级 码龄6年 155粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值