import cv2
import numpy as np
def cv_show(neme, img):
# cv2.namedWindow(neme, cv2.WINDOW_NORMAL)
cv2.imshow(neme, img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 大图
img_rgb = cv2.imread('0.jpg')
# 灰度图
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
# 小图
template = cv2.imread('0_1.jpg', 0)
h, w = template.shape[:2]
# h,w=template.shape[:2]
# 模板匹配 参数:(图片,,图片,方法6种选--尽量用归一化的) 左上角定位
# 小图片匹配大图片的位置,拼图一样,将小图片作为类似卷积核一样,去由左至右,上至下进行扫描
# 小图片的每个像素点 0~255,去减大图片的像素点,看结果,越小的越匹配概率越高
# 原理 图片1=A*B 图片2=a*b (A-a+1)*(B-b) 大小=shape值 长*宽=A*B
res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
# #最小值,最大值,最小值位置,最大值位置=cv2.minMaxLoc
# #是将所有的匹配,找出最小或者最大的点,因为是上至下,左至右的扫描方法,所以左上角的是最小值的最新被发现的
# min_val,max_val,min_loc,max_loc=cv2.minMaxLoc(res) #给自己看的,程序中不需要
# 取匹配程度大于%80的坐标
threshold = 0.8
loc = np.where(res >= threshold)
for pt in zip(*loc[::-1]): # *号便是可选参数
bottom_right = (pt[0] + w, pt[1] + h)
cv2.rectangle(img_rgb, pt, bottom_right, (0, 0, 255), 2)
cv2.imshow('sd', img_rgb)
cv2.waitKey(0)
opencv 模板匹配
于 2022-01-26 10:27:58 首次发布