opencv模板匹配
import cv2
import numpy as np
import matplotlib.pyplot as plt
img =cv2.imread('E:/python/sunflower.png')
temp=cv2.imread('E:/python/s.jpg')
w,h=temp.shape[:2]
img2=img.copy()
methods=['cv2.TM_CCOEFF','cv2.TM_CCOEFF_NORMED','cv2.TM_CCORR',
'cv2.TM_CCORR_NORMED','cv2.TM_SQDIFF','cv2.TM_SQDIFF_NORMED']
for meth in methods:
img=img2.copy()
method=eval(meth)
res=cv2.matchTemplate(img,temp,method)
min_val,max_val,min_loc,max_loc=cv2.minMaxLoc(res)
if method in [cv2.TM_SQDIFF,cv2.TM_SQDIFF_NORMED]:
top_left=min_loc
else:
top_left=max_loc
bottom_right=(top_left[0]+w,top_left[1]+h)
cv2.rectangle(img,top_left,bottom_right,255,2)
plt.subplot(121),plt.imshow(img,'gray'),plt.title('detect point'),plt.xticks([]),plt.yticks([])
plt.subplot(122),plt.imshow(res,'gray'),plt.title('matching'),plt.xticks([]),plt.yticks([])
plt.suptitle(meth)
plt.show
多对象匹配
import cv2
import numpy as np
import matplotlib.pyplot as plt
img =cv2.imread('E:/python/yibi.jpg')
temp=cv2.imread('E:/python/yibi1.jpg')
w,h=temp.shape[:2]
#methods=['cv2.TM_CCOEFF','cv2.TM_CCOEFF_NORMED','cv2.TM_CCORR',
#'cv2.TM_CCORR_NORMED','cv2.TM_SQDIFF','cv2.TM_SQDIFF_NORMED']
meth='cv2.TM_CCOEFF_NORMED'
method=eval(meth)
res=cv2.matchTemplate(img,temp,method)
min_val,max_val,min_loc,max_loc=cv2.minMaxLoc(res)
threshold=0.8*max_val
loc=np.where(res>=threshold)
for pt in zip(*loc[::-1]):
cv2.rectangle(img,pt,(pt[0]+w,pt[1]+h),255,2)
img=img[:,:,::-1]
plt.subplot(121),plt.imshow(img),plt.title('detect point'),plt.xticks([]),plt.yticks([])
plt.subplot(122),plt.imshow(res,'gray'),plt.title('matching'),plt.xticks([]),plt.yticks([])
plt.suptitle(meth)
plt.show