模板匹配
1 概念函数理解
1.1 概念
模板匹配是一种在较大图像中探求与给定模板图像最相似地域的技能。它是图像处理惩罚和计算机视觉中的一个基本使命,广泛应用于各种领域,如物体识别、图像检索和视频监控等。
1.2 步调
- 选择模板:首先,确定您想在较大图像中查找的小图像地域(模板)。
- 滑动窗口:将模板图像在较大图像上滑动,从左到右,从上到下,确保模板图像覆盖大图像的每一个可能位置。
- 相似度度量:在每个位置,计算模板图像与较大图像中对应地域的相似度。常用的相似度度量方法包罗:
- 绝对差值和(Sum of Absolute Differences, SAD)
- 平方差和(Sum of Squared Differences, SSD)
- 归一化互相干(Normalized Cross-Correlation, NCC)
- 布局相似性指数(Structural Similarity Index, SSIM)
- 找到最佳匹配:相似度度量的结果产生一个分数,表示模板与较大图像中每个位置的匹配程度。最高分数的位置被认为是最佳匹配。
- 结果输出:输出最佳匹配的位置,偶然还包罗匹配度量的分数。
模板匹配的一个关键挑战是它对图像的缩放、旋转和光照变化比较敏感。为了提高匹配的鲁棒性,可能必要对模板或搜索图像进行预处理惩罚,如归一化、直方图平衡化或使用更复杂的特征匹配方法。
1.3 函数
cv2.matchTemplate(img,tem,method) 匹配,一样寻常设置此三个参数,其他参数默认result=None, mask=None,返回值为得分
具体如下:
- img: 待搜索的图像,即大图像,可以是灰度图像或者彩色图像。
- templ: 搜索的模板,它必须不大于待搜索的图像,而且与img具有相同的类型(灰度或彩色)。
- method: 用于比较模板和图像的匹配方法。以下是可用的方法:
- cv2.TM_SQDIFF: 平方差和(Sum of Squared Differences)
- cv2.TM_SQDIFF_NORMED: 归一化的平方差和
- cv2.TM_CCORR: 相干性系数
- cv2.TM_CCORR_NORMED: 归一化的相干性系数
- cv2.TM_CCOEFF: 相干系数的系数
- cv2.TM_CCOEFF_NORMED: 归一化的相干系数的系数
- result: 匹配结果图像,它是一个浮点单通道图像,其大小取决于模板的大小。如果img的大小是(W x H),而templ的大小是(w x h),则result的大小将是((W-w+1) x (H-h+1))。
- mask: 可选参数,用于指定模板图像的掩码。当模板图像不完备或者您只对模板图像的某个部分感爱好时,可以使用掩码。掩码必须是一个单通道与templ大小相同的图像。
2 现实测试
2.1 图片数据
2.2 代码测试
代码展示:
- import cv2
- import numpy as np
- img = cv2.imread('tu.jpg')
- img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
- tem = cv2.imread('jian.jpg',0)
- tem_rot90 = np.rot90(tem,k=1)
- tem_rot90_1 =np.rot90(tem,k=-1)
- tem_list = [tem,tem_rot90,tem_rot90_1]
- for i in tem_list:
- h, w = i.shape[:2]
- res = cv2.matchTemplate(img_gray, i, cv2.TM_CCOEFF_NORMED)
- # 设置阈值
- thr = 0.9
- # 匹配结果得分大于阈值的坐标
- loc = np.where(res>=thr)
- # 根据坐标画出矩形轮廓
- for pt in zip(*loc[::-1]):
- cv2.rectangle(img,pt,(pt[0]+w,pt[1]+h),(255,0,0),1)
-
- cv2.imshow('tem',tem)
- cv2.waitKey(0)
- cv2.imshow('res',img)
- cv2.waitKey(0)
复制代码 运行结果:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |