opencv模板匹配

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)

Original: https://blog.csdn.net/wcc8848/article/details/123061076
Author: wcc8848
Title: opencv模板匹配

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/704328/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球