第一章:模板匹配
模板匹配:模板匹配是指在当前图像A内寻找与图像B最相似的部分,一般将图像A称为输入图像,将图像B 称为模板图像。 模板匹配的操作方法是将模板图像B 在图像A 上滑动,遍历所有像
素以完成匹配。
代码如下:
import cv2
import numpy as np
代码如下:
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()
代码展示如下:
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()
效果图展示: