当前位置: 首页 > news >正文

OpenCV | 模版匹配

import cv2 #opencv读取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt#Matplotlib是RGB
%matplotlib inline

模版匹配

  • 模版匹配和卷积原理很像,模版在原图像上从原点开始滑动,计算模版与(图像被模版覆盖的地方)的差别层度,这个差别成都的计算方法在opencv里有6种,然后将每次计算的结果放入一个矩阵里,作为结果输出。假如原图案是A×B大小,而模版是a×b大小,则输出结果的矩阵是(A-a+1)×(B-b+1)

 face.jpg

lena.jpg

#模版匹配
img = cv2.imread('lena.jpg',0)
template = cv2.imread('face.jpg',0)
h,w = template.shape[:2]

 查看相关参数:

img.shape
template.shape
  • TM_SQDIFF : 计算平方不同,计算出来的值越小,越相关
  • TM_COORR :计算相关性,计算出来的值越大,越相关
  • TM_CCOEFF : 计算相关系统,计算出来的值越大,越相关
  • TM_SQDIFF_NORMED :计算归一化平方不同,计算出来的值越接近0,越相关
  • TM_CCORR_NORMED: 计算归一化相关性,计算出来的值越接近1,越相关
  • TM_CCOEFF_NORMED : 计算归一化相关系数,计算出来的值越接近1,越相关
methods = ['cv2.TM_CCOEFF','cv2.TM_CCOEFF_NORMED','cv2.TM_CCORR','cv2.TM_CCORR_NORMED','cv2.TM_SQDIFF','cv2.TM_SQDIFF_NORMED']res = cv2.matchTemplate(img,template,cv2.TM_SQDIFF)
res.shapemin_val,max_val,min_loc,max_loc = cv2.minMaxLoc(res)min_valmax_valmin_locmax_loc

 

for meth in methods:img2 = img.copy()#匹配方法的真值method = eval(meth)print (method)res = cv2.matchTemplate(img,template,method)min_val,max_val,min_loc,max_loc = cv2.minMaxLoc(res)#如果是平方差匹配TM_SQDIFF或归一化平方差匹配TM_SQDIFF_NORMED,取最小值if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:top_left = min_locelse:top_left = max_locbottom_right = (top_left[0]+w,top_left[1]+h)#画矩形cv2.rectangle(img2,top_left,bottom_right,255,2)plt.subplot(121),plt.imshow(res,cmap='gray')plt.xticks([]),plt.yticks([]) #隐藏坐标轴plt.subplot(122),plt.imshow(img2,cmap = 'gray')plt.xticks([]),plt.yticks([])plt.suptitle(meth)plt.show()

运行出的结果

匹配多个目标对象

 mario_coin.jpg

mario.jpg

img_rgb = cv2.imread('mario.jpg')
img_gray = cv2.cvtColor(img_rgb,cv2.COLOR_BGR2GRAY)
template = cv2.imread('mario_coin.jpg',0)
h,w = template.shape[:2]res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.8
#匹配成都大于%80 的坐标
loc = np.where(res >= threshold)
for pt in zip(*loc[::-1]): #*号表示可选参数bottom_right = (pt[0] + w, pt[1] +h)cv2.rectangle(img_rgb,pt,bottom_right,(0,0,255),2)cv2.imshow('img_rgb',img_rgb)
cv2.waitKey(0)

运行结果:

http://www.lryc.cn/news/247671.html

相关文章:

  • 【算法刷题】Day7
  • 前端 | iframe框架标签应用
  • linux -系统通用命令查询
  • python炒股自动化(1),量化交易接口区别
  • LeetCode(35)螺旋矩阵【矩阵】【中等】
  • BeanUtil.copyProperties的优化与使用(解决copyProperties null值覆盖问题)
  • Redis基本操作及使用
  • python 继承父类的变量和方法
  • ubuntu22.04新机使用(换源,下载软件,安装显卡驱动,锁屏长亮)
  • 如何给shopify的网址做301跳转
  • Redis之秒杀系统
  • c++基础----new
  • Java中的mysql——面试题+答案(存储过程,外键,隔离级别,性能优化)——第23期
  • 一种新的基于物理的AlGaN/GaN HFET紧凑模型
  • uniapp基础-教程之HBuilderX基础常识篇02
  • 如何源码编译seaTunnel
  • msng病毒分析
  • Unity安装
  • 【代洋集团特惠好物:80瓦太阳能折叠包】
  • 一致性Hash算法
  • linux 下如何将/dev/nvme0n1符格式化为空盘符
  • IP地址的最后一位不可以为0或255
  • 代洋集团:太阳能智能座椅,创新能源的未来篇章
  • linux服务器安装gitlab
  • Tlog SpringBoot3.x版本无法正常打印TraceId等数据
  • 基于Spring原生框架构建原生Spring的第一个程序!
  • [个人笔记] Git的CLI笔录
  • 如何运行C/C++程序
  • HTML中input标签的23种type类型
  • 接口多态与方法多态