在做目标检测、图像识别时,我们经常用到模板匹配,以确定模板在输入图像中的可能位置
API函数
python
cv2.matchTemplate(image, templ, method, result=None, mask=None)
参数含义:
image:待搜索图像
templ:模板图像
method:计算匹配程度的方法,可以有:
TM_SQDIFF 平方差匹配法:该方法采用平方差来进行匹配;匹配越好,值越小;匹配越差,值越大。
TM_CCORR 相关匹配法:该方法采用乘法操作;数值越大表明匹配程度越好。 TM_CCOEFF 相关系数匹配法:数值越大表明匹配程度越好。
TM_SQDIFF_NORMED 归一化平方差匹配法,匹配越好,值越小;匹配越差,值越大。
TM_CCORR_NORMED 归一化相关匹配法,数值越大表明匹配程度越好。
-> TM_CCOEFF_NORMED 归一化相关系数匹配法,数值越大表明匹配程度越好。
比如我要在可口可乐瓶中匹配出如下的可口可乐商标,这么做呢
可口可乐瓶:
要匹配的商标:
python
import cv2
# 读取名为'cola.png'的图像作为原图
kele = cv2.imread('cola.png')
# 读取名为'co_t.png'的图像作为模板
template = cv2.imread('template.png')
cv2.imshow('kele', kele) # 显示原图
cv2.imshow('c', template) # 显示模板
cv2.waitKey(0) # 等待按键
h, w = template.shape[:2] # 获取模板的高度和宽度
# 在原图中匹配模板
res = cv2.matchTemplate(kele, template, cv2.TM_CCOEFF_NORMED)
# 获取匹配结果中的最小值、最大值及对应的位置
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('k', kele_template) # 显示绘制了矩形的原图
cv2.waitKey(0) # 等待按键
输出: