opencv模板匹配

模板匹配的定义:

模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术。模板匹配不是基于
直方图的, 而是通过在输入图像上滑动图像块(模板)同时比对相似度, 来对模板和输入图像进行匹配
的一种方法
def matchTemplate(image, templ, method, result=None, mask=None)
image: 待搜索图像(大图)
templ: 搜索模板, 需和原图一样的数据类型且尺寸不能大于源图像
result: 比较结果的映射图像, 其必须为单通道, 32位浮点型图像, 如果原图(待搜索图像)尺寸为W x H, 而templ尺寸为 w x h, 则result尺寸一定是(W-w+1)x(H-h+1)
method: 指定的匹配方法, 有如下6种:
cv2.TM_SQDIFF ------平方差匹配法(最好匹配0)
cv2.TM_SQDIFF_NORMED ------归一化平方差匹配法(最好匹配0)
cv2.TM_CCORR ------相关匹配法(最坏匹配0)
cv2.TM_CCORR_NORMED ------归一化相关匹配法(最坏匹配0)
cv2.TM_CCOEFF ------系数匹配法(最好匹配1)
cv2.TM_CCOEFF_NORMED ------化相关系数匹配法(最好匹配1)
本文举例两种方式:
1.opencv方法:通过opencv的matchTemplate()方法进行模板匹配,并通过cv2.rectangle()方法画出来:

 

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)

 

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值