模板匹配

系列文章目录

第一章:模板匹配


 

文章目录

  • 系列文章目录
  • 一、模板匹配是什么?
  • 、使用步骤
    • 1.引入库
    • 2.读入数据
    • 3.效果图展示
  • 三、练习
  • 总结

 

一、模板匹配是什么?

模板匹配:模板匹配是指在当前图像A内寻找与图像B最相似的部分,一般将图像A称为输入图像,将图像B 称为模板图像。 模板匹配的操作方法是将模板图像B 在图像A 上滑动,遍历所有像
素以完成匹配。

二、使用步骤

1.引入库

代码如下:

import cv2
import numpy as np

2.读入数据

代码如下:

import cv2
import numpy as np

img = cv2.imread("yinhua2.png")#读取原图
template = cv2.imread("yinhua.png")#读取模板

result = cv2.matchTemplate(img,template,0)#进行模板匹配

min_val,max_val,min_loc,max_loc = cv2.minMaxLoc(result)#查找最大最小值位置
h,w = template.shape[:2]#获取模板的高和宽
top_left = min_loc#查找最小值位置
bottom_right = (top_left[0]+w , top_left[1]+h)#查找右下角位置

cv2.rectangle(img,top_left,bottom_right,255,2)#绘制匹配到的矩形

cv2.imshow("img",img)
cv2.imshow("template",template)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.效果图展示

模板匹配_第1张图片

三.练习

如何匹配多个印花模板?

代码展示如下:

import cv2

import numpy as np

 

img = cv2.imread("yinhua2.png")#读取原图

template = cv2.imread("yinhua.png")#读取模板

 

result = cv2.matchTemplate(img,template,cv2.TM_SQDIFF_NORMED)#进行模板匹配

threshold = 0.01#定义阈值,因为TM_SQDIFF_NORMED越接近0越匹配,所以设置阈值为0.01

 

loc = np.where(result <= threshold)#匹配结果小于阈值的位置

print(*loc[::-1])

 

for pt in zip(*loc[::-1]):#遍历位置,zip把两个列表依次参数打包

    right_bottom = (pt[0] + w,pt[1] + h)#右下角位置

    cv2.rectangle(img,pt,right_bottom, (0,0,255),2)

 

cv2.imshow("img",img)

cv2.imshow("template",template)

cv2.waitKey(0)

cv2.destroyAllWindows()

效果图展示:

模板匹配_第2张图片


总结

模板匹配_第3张图片模板匹配_第4张图片

你可能感兴趣的:(OpenCV,opencv,python)