opencv模板匹配
模板匹配的定义:模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术。模板匹配不是基于直方图的, 而是通过在输入图像上滑动图像块(模板)同时比对相似度, 来对模板和输入图像进行匹配的一种方法def matchTemplate(image, templ, method, result=None, mask=None)image: 待搜索图像(大图)templ: 搜索模板, 需和原图
模板匹配的定义:
def matchTemplate(image, templ, method, result=None, mask=None)
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('messi.jpg')
imgcopy = img.copy()
ball = cv2.imread('ball.jpg')
##imread后面的参数:
#。 0 代表灰度图,>0是
img_h,img_w ,_ = img.shape
ball_h ,ball_w,_ = ball.shape
##选取比较方法
method = cv2.TM_SQDIFF
##进行匹配计算
res = cv2.matchTemplate(img,ball,method)##原图的每个区域于模板的相识度的值
##
print(res)
##最值的获取,也就是最相似的地方
min_val ,max_val,min_loc,max_loc = cv2.minMaxLoc(res)
print(min_loc)
##定位模板匹配的位置
top_left = min_loc
bottom_right = (top_left[0]+ball_w,top_left[1]+ball_h)
##绘制矩形
cv2.rectangle(img,top_left,bottom_right,255,-1)
cv2.imshow('result',np.hstack([imgcopy,img]))
cv2.waitKey(0)
##第二种,自我实现。
模板匹配的核心就是在图像的像素中计算模板与图像的相识度区域
def consinsim(vect1,vect2):
#余弦公式
vect1 =np.array(vect1)
vect2 = np.array(vect2)
result = np.dot(vect1,vect2)/(np.linalg.norm(vect1)*np.linalg.norm(vect2))
return result
def cal_dist(vec1,vec2):
return round(np.dot(vec1,vec2)/np.sqrt((np.dot(vec1,vec1)*np.dot(vec2,vec2))),4)
img = cv2.imread('messi.jpg',0)
img_ori = img.copy()
ball = cv2.imread('ball.jpg',0)
img_h,img_w = img.shape
ball_h,ball_w = ball.shape
res = {}
for i in range(img_h - ball_h + 1):
for j in range(img_w - ball_w+1):
print(i,j)
field = img[i:i+ball_h,j:j+ball_w]
##2,相似度的计算
field_vec = field.reshape(-1).astype(np.float)###特别注意一定要使用长的字符类型
ball_vec = ball.reshape(-1).astype(np.float)
score = consinsim(field_vec,ball_vec)
res[(j,i)] = score
#3排序并获取相似度最高的区域
max_loc ,maxvalue = sorted(res.items(), key=lambda x:x[-1])[-1]
bottom_right = (max_loc[0]+ball_w,max_loc[1]+ball_h)
cv2.rectangle(img,max_loc,bottom_right,255,2)
cv2.imshow('result',np.hstack([img_ori,img]))
cv2.waitKey(0)
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)