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

相关推荐
十五年专注C++开发2 小时前
dlib: 一个跨平台的 C++ 机器学习 / 数值计算库
c++·人工智能·python·机器学习
坚持学习前端日记2 小时前
Agent AI 多模态交互与全场景架构设计
前端·javascript·人工智能·visual studio
爱搜光年医疗GEO2 小时前
爱搜光年医疗GEO系统架构技术讨论:RAG消费医疗场景下的抗干扰语义近邻过滤机制
人工智能·ai搜索优化·geo优化·医疗geo·医疗行业geo·爱搜光年
Daydream.V2 小时前
Opencv——模板匹配附项目实战(一)
人工智能·opencv·计算机视觉
科技快报2 小时前
首驱科技亮相AWE2026 以AI核心技术重构两轮智能出行新范式
人工智能·科技·重构
人工智能AI技术2 小时前
C# 接入 Grok4.20 实战:在 .NET 8 中打造高可靠 AI 搜索服务
人工智能·c#
BingoGo2 小时前
Chrome DevTools MCP 让 AI 无缝接管浏览器调试会话
人工智能
郝学胜-神的一滴2 小时前
深度学习浪潮:解锁技术边界与产业新图景
数据结构·人工智能·python·深度学习·算法
Elastic 中国社区官方博客2 小时前
使用 Elasticsearch 进行实体解析,第 4 部分:终极挑战
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索