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

相关推荐
papaofdoudou17 分钟前
判断排列逆序奇偶性的乘积判别法(范德蒙德符号法)
人工智能·算法
砖厂小工17 分钟前
Android PR Review:Skill、Model 和交叉 Review 谁更重要?
人工智能
孔汤姆29 分钟前
ESP32 掌机改造全记录:WiFi 遥测、一键启动 AI 终端
人工智能
HyperAI超神经29 分钟前
【vLLM 学习】Disaggregated Prefill
人工智能·深度学习·学习·vllm
我星期八休息1 小时前
网络编程—网络层
开发语言·前端·网络·人工智能·智能路由器
逻辑君2 小时前
ANNA 7.2 方块机器人实验技术报告
人工智能·深度学习·机器学习·机器人
菜鸟‍2 小时前
【论文学习】Medical Image Analysis 2024 || 医学图像分割中失败检测方法的比较基准研究:揭示置信度聚合的作用
人工智能·学习
AI导出鸭2 小时前
怎么让千问做表格?AI导出鸭苹果版将千问输出的管道表格智能解析为二维结构,一键导出为Excel或Word标准表格。
人工智能·chatgpt·word·excel·ai导出鸭
陈嘿萌2 小时前
ECCV 2026 | 南开&OPPO开源 ExpoMotion:首个大规模动态多曝光融合数据集
人工智能·计算机视觉·图像融合·南开大学·新数据集·expomotion·多曝光融合
zyplayer-doc2 小时前
zyplayer-doc企业知识库能做什么:从文档创建、权限管理到AI问答的完整能力
大数据·javascript·数据库·人工智能·pdf·word