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

相关推荐
lijianhua_97126 小时前
国内某顶级大学内部用的ai自动生成论文的提示词
人工智能
EDPJ6 小时前
当图像与文本 “各说各话” —— CLIP 中的模态鸿沟与对象偏向
深度学习·计算机视觉
蔡俊锋6 小时前
用AI实现乐高式大型可插拔系统的技术方案
人工智能·ai工程·ai原子能力·ai乐高工程
自然语6 小时前
人工智能之数字生命 认知架构白皮书 第7章
人工智能·架构
大熊背6 小时前
利用ISP离线模式进行分块LSC校正的方法
人工智能·算法·机器学习
eastyuxiao7 小时前
如何在不同的机器上运行多个OpenClaw实例?
人工智能·git·架构·github·php
诸葛务农7 小时前
AGI 主要技术路径及核心技术:归一融合及未来之路5
大数据·人工智能
光影少年7 小时前
AI Agent智能体开发
人工智能·aigc·ai编程
charlee447 小时前
最小二乘问题详解17:SFM仿真数据生成
c++·计算机视觉·sfm·数字摄影测量·无人机航测
ai生成式引擎优化技术7 小时前
TSPR-WEB-LLM-HIC (TWLH四元结构)AI生成式引擎(GEO)技术白皮书
人工智能