© Fu Xianjun. All Rights Reserved
一、模板匹配
模板匹配是指在当前图像A内寻找与图像B最相似的部分,一般将图像A称为输入图像,将图像B称为模板图像。
1.模板匹配基础
语法格式:
result = cv2.matchTemplate(iamge,temp1,method[,mask])
· image为原始图像,必须是8位或者32位的浮点型图像。
· temp1为模板图像。它的尺寸必须小于或等于原始图像,并且与原始图像具有同样的类型。
· method为匹配方法。该参数通过TemplateMatchModes实现,有6种可能的值。
method的值以及含义
参数值 | 对应数值 | 说明 |
---|---|---|
cv2.TM_SQDIFF | 0 | 以差方位依据进行匹配。若完全匹配,则结果为零;若不匹配,则会得到一个很大的值 |
cv2.TM_SQDIFF_NORMED | 1 | 标准(归一化)平方差匹配 |
cv2.TM_CCORR | 2 | 相关匹配,这类方法将模板图像与输入图像相乘,如果乘积较大,表示匹配程度较高;如果乘积为0,则表示匹配效果最差 |
cv2.TM_CCORR_NORMED | 3 | 标准(归一化)相关匹配 |
cv2.TM_CCOEFF | 4 | 相关系数匹配,这类方法将模板图像与其均值相对值,和输入图像与其均值的相关值进行匹配。1表示完美,-1表示糟糕的匹配,0表示没有任何相关性(随机序列) |
cv2.TM_CCOEFF_NORMED | 5 | 标准(归一化)相关系数匹配 |
· mask为模板图像掩模。它必须和模板图像temp1具有相同的类型大小。通常情况下该值使用默认值即可。当前,该参数仅支持cv2.TM_SQDIFF和cv2.TM_CCORR_NORMED两个值。
2.多模板匹配
1.导入需要的库
代码如下:
import cv2
import numpy as np
#Matplotlib是RGB
import matplotlib.pyplot as plt
%matplotlib inline
#定义显示图片的函数,避免重复代码
def cv_show(name, img):
cv2.imshow(name, img)
cv2.waitKey()
cv2.destroyAllWindows()
2.读取模板图片
代码如下:
#读取模板图片
template = cv2.imread("lena_eye.jpg")
cv_show("template",template)
3.读取检测图片
代码如下:
img = cv2.imread("lena.jpg")
cv_show("img", img)
4.获取模板的大小
代码如下:
#获取到我们模板的大小h,w
h, w = template.shape[:2]
4.模板匹配
代码如下:
#开始模板匹配过程(采用计算归一化平方不同,计算值越接近0,越相关)
res = cv2.matchTemplate(img, template, cv2.TM_SQDIFF_NORMED)
min_val, max_val