【Opencv计算机视觉-模版匹配】

Opencv计算机视觉

一、模板匹配的基本概念

模版匹配:模板匹配是一种用于查找与模板图像(补丁)匹配(相似)的图像区域的技术。

为了识别匹配区域,我们必须通过滑动来将模板图像与源图像进行比较,它的基本思想是:将模板图像在待搜索图像上滑动,计算模板与待搜索图像中每个对应区域的相似度,最终找到相似度最高的区域。

一次移动一个像素(从左到右,从上到下)。在每个位置,都会计算一个度量(度量计算公式参考OpenCV: Template Matching),以便它表示该位置的匹配"好"或"坏"程度

二、代码逐行解析

  1. 导入库和读取显示图像
python 复制代码
import cv2
kele = cv2.imread('kele.png')
template = cv2.imread('template.png')
cv2.imshow('kele',kele)
cv2.imshow('template.png',template)
# cv2.waitKey(0)

kele.png

template.png

2.获取模板尺寸并进行模板匹配

python 复制代码
h,w=template.shape[:2]
res=cv2.matchTemplate(kele,template,cv2.TM_CCOEFF_NORMED)

h,w=template.shape:2:获取模板图像的高度(h)和宽度(w)。这两个值将用于后续在匹配位置绘制矩形框。

cv2.matchTemplate(image, templ, method):这是模板匹配的核心函数。

image:待搜索的大图像(kele)。

templ:模板图像(template)。

method:匹配方法。这里使用的是cv2.TM_CCOEFF_NORMED(归一化相关系数匹配法)。

返回值res:一个结果矩阵,其大小为(H-h+1, W-w+1),其中H和W是待搜索图像的高度和宽度。矩阵中的每个元素表示模板在对应位置的匹配程度。

  1. 处理匹配结果并获取最佳匹配位置
python 复制代码
min_val,max_val,min_loc,max_loc=cv2.minMaxLoc(res)
top_left=max_loc
bottom_right=(top_left[0]+w,top_left[1]+h)

cv2.minMaxLoc(res):分析结果矩阵res,返回其中的最小值(min_val)、最大值(max_val)、最小值的位置(min_loc)和最大值的位置(max_loc)

top_left=max_loc:对于TM_CCOEFF_NORMED方法,最大值的位置就是最佳匹配区域的左上角坐标。不同的匹配方法对 "最佳匹配" 的定义不同:

对于TM_SQDIFF和TM_SQDIFF_NORMED,最小值对应最佳匹配。

对于TM_CCORR、TM_CCORR_NORMED、TM_CCOEFF、TM_CCOEFF_NORMED,最大值对应最佳匹配。

bottom_right=(top_left0+w,top_left1+h):根据模板的宽度和高度,计算出最佳匹配区域的右下角坐标。

4.绘制匹配结果并显示

python 复制代码
kele_temple=cv2.rectangle(kele,top_left,bottom_right,(0,255,0),2)
cv2.imshow('kele_template',kele_temple)
cv2.waitKey(0)

cv2.rectangle(image, pt1, pt2, color, thickness):在大图像kele上绘制一个矩形框,标记出最佳匹配区域。

pt1:矩形的左上角坐标(top_left)。

pt2:矩形的右下角坐标(bottom_right)。

color:矩形的颜色,这里是绿色((0,255,0))。

thickness:矩形边框的厚度,这里是 2 个像素。

cv2.imshow('kele_template',kele_temple):显示绘制了匹配结果的图像。

cv2.waitKey(0):暂停程序,等待用户按下任意键后关闭所有窗口

三、常用的模板匹配方法

方法 特点 最佳匹配值
TM_SQDIFF 平方差匹配法,匹配值越小,匹配度越高 最小值
TM_SQDIFF_NORMED 归一化平方差匹配法,对亮度和对比度不敏感 最小值
TM_CCORR 相关匹配法,匹配值越大,匹配度越高 最大值
TM_CCORR_NORMED 归一化相关匹配法,对亮度和对比度不敏感 最大值
TM_CCOEFF 相关系数匹配法,匹配值越大,匹配度越高 最大值
TM_CCOEFF_NORMED 归一化相关系数匹配法,对亮度和对比度不敏感,效果通常最好 最大值

推荐使用归一化的方法(如TM_CCOEFF_NORMED),因为它们对图像的亮度和对比度变化具有更好的鲁棒性

相关推荐
冬奇Lab9 小时前
Workflow 系列(01):基础理论——三种执行模型与 Anthropic 5 种模式
人工智能·agent·工作流引擎
冬奇Lab9 小时前
每日一个开源项目(第143篇):page-agent - 纯 JS 的网页 GUI Agent,无需截图、无需插件、无需后端
前端·人工智能·agent
程序员cxuan11 小时前
虽迟但到!GPT-5.6 终于来了!
人工智能·后端·程序员
ZhengEnCi13 小时前
Q03-UI设计进阶技巧-让界面更高级的7个核心原则
人工智能
IT_陈寒13 小时前
React的这个渲染问题连官方文档都没说清楚
前端·人工智能·后端
不加辣椒14 小时前
第12章 工具调用与 Agent 提示工程
人工智能
用户16931761726614 小时前
前端给AI消息做日期分组与时间线
人工智能
i晟14 小时前
Claude Code Harness 深度拆解:从你敲回车到模型回复,中间发生了什么
人工智能
用户2527362781416 小时前
【踩坑复盘】我在本地跑 RAG 知识库时踩了 5 个大坑,吐血整理避坑指南
人工智能
大模型真好玩16 小时前
LangChain DeepAgents 速通指南(九)—— 生产级智能体框架 DeepAgents Code 源码导读
人工智能·langchain·agent