在学习B站教学视频的时候记录的笔记
OpenCV+TensorFlow】迪哥带你做项目!深度学习+计算机视觉实战 纯实战教学 技能点加满
7.1 模板匹配
模板匹配和卷积原理很像,模板在原图像上从原点开始滑动,计算模板与(图像被模板覆盖的地方)的差别程度。这个差别程度的计算方法在opencv里有6种,然后将每次计算的结果放入一个矩阵里,作为结果输出。假如原图形是AxB大小,而模板是axb大小,则输出结果的矩阵是(A-a+1)x(B-b+1)
#模板匹配
img= cv2.imread('H:\Peronal\lena.jpg')
template = cv2.imread('H:\Peronal\\face.png',0)
h,w = template.shape[:2]
左侧小图为face.png右侧大图为lena.jpg.假设在lena.jpg图像上分割出几个区域,然后找出这几个区域中跟face最像的那个区域。大致思路如下:从A到I每一个与face进行一次匹配,直至找到最为匹配的那个区域完成查找工作(图中的分割示意等分)。
那么每个区域与face如何判断匹配?最简单是每一个像素进行匹配,例如,首先进行(0,0)这个像素点进行比较,数值相同即为匹配。然后再比较(0,1)如此循环直至face的全部像素点都计算一遍。
最终会返回一个匹配结果:
A B ... E ... I
0% 0%... 100% ... 0%
由于匹配方法的不同,结果也不同。但含义是一致的。
-
TM_SQDIFF :计算平方不同,计算出来的值越小越相关
-
TM_CCORR:计算相关性,计算出来的值越大越相关
-
TM_CCOEFF:计算相关系数,计算出来的值越大越相关
-
TM_SQDIFF_NORMED:计算归一化平方不同,计算出来的值越接近0越相关
-
TM_CCORR_NORMED:计算归一化相关性,计算出来的值越接近1越相关
-
TM_CCOEFF_NORMED:计算归一化相关系数,计算出来的值越接近1越相关
如图:
处理过程:
template =