【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),因为它们对图像的亮度和对比度变化具有更好的鲁棒性

相关推荐
云道轩16 小时前
腾讯云上有性能比较强的英伟达GPU
人工智能·云计算·腾讯云·英伟达gpu
常宇杏起在16 小时前
AI安全专项:AI密码技术的应用与安全防护
人工智能·安全
不惑_16 小时前
腾讯云WorkBuddy实战, 全场景智能体工作搭子,这只龙虾真能帮你干活吗
人工智能·云计算·腾讯云·openclaw
wanmeijuhao16 小时前
腾讯云 AI 代码助手编程挑战赛 + 构建开发板垃圾图片识别AI对话的Copilot
人工智能·腾讯云·copilot·腾讯云ai代码助手
X54先生(人文科技)16 小时前
《元创力》纪实录·卷宗2.1P上去的安全带:当“表演性合规”成为文明的遮羞布
人工智能·架构·开源·ai写作·开源协议
Herlie16 小时前
01Agent和传统选题工具区别:账号定位适配怎么选
人工智能
user_admin_god16 小时前
Claude Code 安装与配置指南:兼容国产模型,禁止自动更新
java·人工智能
HyperAI超神经16 小时前
MiniCPM5-1B采用RL+OPD训练,多项复杂任务达SOTA;面向复杂医疗业务自动化:医疗智能体评测数据集 CHI-Bench
人工智能·深度学习·ai·计算化学
一个王同学16 小时前
从零到一 | CV转多模态大模型 | week12 | 整理 MiniLLaVA 工程与文档
人工智能·深度学习·算法·机器学习·计算机视觉
IT_陈寒16 小时前
Java Stream并行流的坑:我花了3小时才找到的线程安全问题
前端·人工智能·后端