快速学会使用OpenCV进行图片模板匹配

目录

引言:

安装OpenCV

模板匹配函数介绍

模板匹配示例

1. 准备图像

2. 执行模板匹配

3. 查找匹配位置

4. 绘制矩形框

5. 显示结果

完整代码展示

 结论


引言:

在计算机视觉领域,模板匹配是一种强大的技术,用于在一幅图像中寻找特定图案或物体的位置。OpenCV是一个流行的计算机视觉库,它提供了丰富的工具来执行模板匹配任务。在本篇博客中,我们将学习如何使用OpenCV进行模板匹配,并展示一个简单的示例。

安装OpenCV

首先,确保你已经安装了OpenCV。你可以使用pip在命令提示符安装OpenCV:

pip install opencv-python

模板匹配函数介绍

 cv2.matchTemplate是OpenCV库中的一个函数,用于进行模板匹配。它可以在一个给定的图像(源图像)中搜索与一个指定模板图像最相似的区域。具体来说,这个函数会将模板图像滑动遍历源图像的每一个像素点,比较模板图像与源图像每一个小区域的相似度,返回一个灰度图像,每一个像素值表示源图像中对应位置与模板的匹配程度。这个函数在图像处理和计算机视觉任务中,如目标检测、图像识别等,有着广泛的应用。

cv2.matchTemplate函数的原型如下:

cv2.matchTemplate(image, templ, method, result[, mask])
  1. image:这是待搜索的图像,也被称为源图像
  2. templ:这是搜索模板,需要和源图像具有相同的数据类型,尺寸不能大于源图像
  3. method:这个参数指定匹配方法:

cv2.TM_SQDIFF: 平方差匹配,返回最小值。

cv2.TM_SQDIFF_NORMED: 归一化平方差匹配,返回最小值。

cv2.TM_CCORR: 相关性匹配,返回最大值。

cv2.TM_CCORR_NORMED: 归一化相关性匹配,返回最大值。

cv2.TM_CCOEFF: 相关性系数匹配,返回最大值。

cv2.TM_CCOEFF_NORMED: 归一化相关性系数匹配,返回最大值。

  4.result: 这是一个可选的参数,如果提供,则用于存储比较结果的映射图像。这个图像必须是单通道,32位浮点型图像。如果源图像的尺寸为W*H,模板图像的尺寸为w*h,则结果图像的尺寸一定是 (W-w+1)*(H-h+1)

  5.mask (可选): 这是一个可选参数,通常为None。如果提供,它应该是一个与主图像相同大小的掩码图像。在匹配期间,只有掩码图像中为非零的区域才会被考虑。

模板匹配示例

1. 准备图像

首先,我们需要准备两幅图像 - 主图像模板图像。主图像是我们要在其中查找模板的图像,而模板图像是我们要在主图像中匹配的小图案。

主图像:kele.png
模板图像:template.png

import cv2 
kele = cv2.imread('kele.png') 
template = cv2.imread('template.png')

2. 执行模板匹配

接下来,我们使用cv2.matchTemplate函数执行模板匹配。这将在主图像中查找模板,并返回一个匹配结果矩阵。

cv2.matchTemplate函数使用归一化相关系数匹配法进行模板匹配,返回相关系数矩阵res

h, w = template.shape[:2] 
res = cv2.matchTemplate(kele, template, cv2.TM_CCOEFF_NORMED)

3. 查找匹配位置

我们使用cv2.minMaxLoc函数来获取匹配结果矩阵中的最小值、最大值,以及它们的位置。

这里关注的是最大值,因为它表示源图像中与模板最相似的位置

min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

4. 绘制矩形框

有了最大匹配位置后,我们可以在主图像上绘制一个矩形框,以标记匹配的区域。cv2.rectangle函数用于在源图像上绘制这个矩形区域

top_left = max_loc 
bottom_right = (top_left[0] + w, top_left[1] + h) 
kele_template = cv2.rectangle(kele, top_left, bottom_right, (0, 255, 0), 2)

5. 显示结果

最后,我们显示带有矩形标记的主图像,以可视化匹配结果,然后等待用户按键并关闭所有窗口。


cv2.imshow('kele_template', kele_template)
cv2.waitKey(100000)
cv2.destroyAllWindows()

完整代码展示

'''图片模板匹配'''
kele = cv2.imread( 'kele.png ')
template = cv2.imread( 'template.png ' )
h ,w = template.shape[ :2]
res = cv2.matchTemplate(kele,template,cv2.TM_CCOEFF_NORMED)
# c v2.minHaxLoc可以获取矩阵中的最小值和最大值.以及最小值的索引号和最大值的索引号
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)
kele_template = cv2.rectangle(kele,top_left, bottom_right,(0,255,0),2)#绘删矩形cv2.imshow( ' kele_template ' ,kele_template)
cv2.imshow('kele_template',kele_template)
cv2.waitKey(100000)
cv2.destroyAllWindows()

 结论

模板匹配是一个强大的计算机视觉技术,用于在图像中寻找特定模式或物体的位置。OpenCV提供了方便的工具来执行模板匹配任务,如上所示。你可以使用这些技术来构建各种应用,从对象检测到图像识别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值