- import cv2 as cv
- import numpy as np
- import matplotlib.pyplot as plt
-
- img_slamdunk = cv.imread("../SampleImages/slamdunk.jpg", cv.IMREAD_COLOR)
- print(img_slamdunk.shape)
-
- template_sakura = cv.imread("../SampleImages/sakura.png", cv.IMREAD_COLOR)
- print(template_sakura.shape)
- rows,cols,channels = template_sakura.shape
-
- #模板匹配
- #cv.matchTemplate(image,templ,method[,result[,mask]])
- #image:原图
- #templ:用于匹配的模板
- #method:原图与模板匹配的方法
- # TM_SQDIFF:平方差匹配法
- # TM_SQDIFF_NORMED:归一化平方差匹配法
- # TM_CCORR:相关匹配法
- # TM_CCORR_NORMED:归一化相关匹配法
- # TM_CCOEFF:系数匹配法
- # TM_CCOEFF_NORMED:归一化系数匹配法
- #result:匹配结果
- #mask:匹配的掩膜(遮罩)
- #参考资料:https://blog.csdn.net/raychiu757374816/article/details/119609851
- matchResult = cv.matchTemplate(img_slamdunk, template_sakura, cv.TM_SQDIFF_NORMED)
-
- #找到最佳匹配的位置,对于平方差匹配法,要找到结果矩阵中最小值的位置。对于相关匹配法,要找到结果矩阵中最大值的位置。
- #minVal,maxVal,minLoc,maxLoc = cv.minMaxLoc(src[,mask])
- #src:输入矩阵
- #mask:掩膜
- #minVal:矩阵的最小值
- #maxVal:矩阵的最大值
- #minLoc:矩阵的最小值的位置
- #maxLoc:矩阵的最大值的位置
- #参考资料:https://blog.csdn.net/qq_29023939/article/details/81023062
- minVal,maxVal,minLoc,maxLoc = cv.minMaxLoc(matchResult)
-
- #用矩形标记结果位置
- top_left = minLoc;
- bottom_right = (top_left[0] + cols, top_left[1] + rows)
- cv.rectangle(img_slamdunk, top_left, bottom_right, (0,255,0), 2)
-
- #显示图像
- fig,axes = plt.subplots(nrows=2, ncols=1, figsize=(15,15), dpi=100)
- axes[0].set_title("Template")
- axes[0].imshow(template_sakura[:,:,::-1])
- axes[1].set_title("Result")
- axes[1].imshow(img_slamdunk[:,:,::-1])