记录模板匹配cv.matchTemplate的实现

参考文献:

81.28-1讲解-模板匹配._哔哩哔哩_bilibili
模板匹配原理:

所谓的模板匹配,就是在给定的图片中查找和模板最相似的区域,该算法的输入包括模板和图片,整个任务的思路就是按照滑窗的思路不断的移动模板图片,计算其与图像中对应区域的匹配度,最终将匹配度最高的区域选择为最终的结果。

代码实现:

import cv2 as cv
from matplotlib import pyplot as plt# 1 图像馫模板读取
img = cv.imread('D:/1/identification_photo.jpg')    # img:[h,w,c]
template=cv.imread('D:/1/identify.jpg')
h,w,c = template.shape

# 模板匹配
#TM_SQDIFF:平方差匹配;TM_CCORR:相关匹配;TM_CCOEFF:相关系数匹配;tm_sqdiff_normed:标准(归一化)平方差匹配。tm_ccorr_normed:标准(归一化)相关匹配。cv2.tm_ccoeff_normed:标准(归一化)相关系数匹配。
res =cv.matchTemplate(img,template, cv.TM_SQDIFF)   #res维度为[img[0]-h, img[1]-w]

#2.2 返回图像中最匹配的位置,确定左上角的坐标,并将匹配位置绘制在图像上
# cv.minMaxLoc函数是 OpenCV 库中的一个函数,用于在一个矩阵(图像或数组)中找出全局的最大值和最小值,以及它们的位置。
min_val,max_val,min_loc,max_loc=cv.minMaxLoc(res)   #todo:值得注意的是,这里输出的坐标是转换之后的,即(w,h)
# 使用平方差时最小值为最佳匹配位置
top_left = min_loc
# top_left = max_loc
bottom_right=(top_left[0]+w,top_left[1]+ h) #获取模板矩形的右下角坐标
cv.rectangle(img,top_left,bottom_right,(0,255,0),2)     # 绘制矩形框
plt.imshow(img[:,:,::-1])       #将BGR转为RGB维度。
plt.title('result'),plt.xticks([]),plt.yticks([])   #设置标题
plt.show()

值得注意的两个点:
①cv.read直接读取的图像不用进行通道变换即可直接输入到cv.matchTemplate;

②cv.minMaxLoc函数返回的坐标是w,h与cv.read直接读取的hwc是不一样的,这里小心犯错。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值