python 模板匹配

举报
风吹稻花香 发表于 2021/06/05 23:36:05 2021/06/05
【摘要】 TM_CCOEFF_NORMED可以用分数过滤,0.7效果还行。 不需要匹配的地方,可以用黑色填充,不能用白色填充,结果仍然返回矩形框。 注释的代码现在不能用分数过滤,会有误检 TM_SQDIFF_NORMED 物体角度变化可能会漏检 import cv2import osimport numpy as np path=r"JPEGImages/" templat...

TM_CCOEFF_NORMED可以用分数过滤,0.7效果还行。

不需要匹配的地方,可以用黑色填充,不能用白色填充,结果仍然返回矩形框。

注释的代码现在不能用分数过滤,会有误检

TM_SQDIFF_NORMED 物体角度变化可能会漏检


      import cv2
      import os
      import numpy as np
      path=r"JPEGImages/"
      template = cv2.imread(r"E:/muban.jpg",0)
      files=os.listdir(path)
      for filepath in files:
       target = cv2.imread(path+filepath,0)
      if target is None:
      continue
       theight, twidth = template.shape[:2]
       w, h = template.shape[::-1]
      # 使用matchTemplate对原始灰度图像和图像模板进行匹配
       res = cv2.matchTemplate(target, template, cv2.TM_CCOEFF_NORMED)
      # 设定阈值
       threshold = 0.6
      # res大于70%
       loc = np.where(res >= threshold)
      # 使用灰度图像中的坐标对原始RGB图像进行标记
      for pt in zip(*loc[::-1]):
       cv2.rectangle(target, pt, (pt[0] + w, pt[1] + h), (7, 249, 151), 2)
      # 显示图像
       cv2.imshow('Detected', target)
       cv2.waitKey(0)
      # #执行模板匹配,采用的匹配方式cv2.TM_SQDIFF_NORMED
      # result = cv2.matchTemplate(target,template,cv2.TM_SQDIFF_NORMED)
      #
      # cv2.normalize( result, result, 0, 1, cv2.NORM_MINMAX, -1 )
      # #寻找矩阵(一维数组当做向量,用Mat定义)中的最大值和最小值的匹配结果及其位置
      # min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
      # #匹配值转换为字符串
      # #对于cv2.TM_SQDIFF及cv2.TM_SQDIFF_NORMED方法min_val越趋近与0匹配度越好,匹配位置取min_loc
      # #对于其他方法max_val越趋近于1匹配度越好,匹配位置取max_loc
      # #绘制矩形边框,将匹配区域标注出来
      # #min_loc:矩形定点
      # #(min_loc[0]+twidth,min_loc[1]+theight):矩形的宽高
      # #(0,0,225):矩形的边框颜色;2:矩形边框宽度
      # cv2.rectangle(target,min_loc,(min_loc[0]+twidth,min_loc[1]+theight),(0,0,225),2)
      # #显示结果,并将匹配值显示在标题栏上
      # print(min_val,max_val)
      # cv2.imshow("MatchResult",target)
      #
      # cv2.waitKey()
      cv2.imwrite(r"e:/new/13.jpg",target)
      cv2.destroyAllWindows()
  
 

 

①TM_SQDIFF是平方差匹配;TM_SQDIFF_NORMED是标准平方差匹配。利用平方差来进行匹配,最好匹配为0.匹配越差,匹配值越大。
②TM_CCORR是相关性匹配;TM_CCORR_NORMED是标准相关性匹配。采用模板和图像间的乘法操作,数越大表示匹配程度较高, 0表示最坏的匹配效果。
③TM_CCOEFF是相关性系数匹配;TM_CCOEFF_NORMED是标准相关性系数匹配。将模版对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性(随机序列)。

文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/95310595

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。