首页 > 其他分享 >opencv 模板匹配

opencv 模板匹配

时间:2023-06-17 17:33:24浏览次数:30  
标签:匹配 img res cv2 opencv shape 模板

-逐个比较像素点之间差异

import cv2
import numpy as np
img=cv2.imread('C:/Users/59925/Desktop/pytest/pics/minions-s.jpg',0)#把图片读取成灰度图
template=cv2.imread('C:/Users/59925/Desktop/pytest/pics/eye.jpg',0)#把图片读取成灰度图
method='cv2.TM_SQDIFF_NORMED'
res=cv2.matchTemplate(img,template,cv2.TM_SQDIFF_NORMED)#选择匹配方法,1代表归一化方差匹配方法。使用归一化的结果更可靠。
#res不是图像矩阵,是模板匹配后相关度矩阵,模板运动范围就是res的shape.
cv2.imshow('res',res)
cv2.waitKey(10)
cv2.destroyAllWindows()
print(img.shape,template.shape,res.shape)#(281, 200) (29, 36) (253, 165).193=281-89+1,91=200-110+1
h,w=template.shape
min_val,max_val,min_loc,max_loc=cv2.minMaxLoc(res)
#最好的匹配效果,有可能是最大值或最小值,根据不同的模板匹配方法确定。
#这里采用归一化方差匹配方法,所以这里要获取最小值。
#根据最小值方差的min_loc,已经已经模板的shape,可以得到模板在图片中匹配的位置。

if method in ['cv2.TM_SQDIFF_NORMED','cv2.TM_SQDIFF']:
    top_left=min_loc
else:
    top_left=max_loc
bottom_right=(top_left[0]+w,top_left[1]+h)
#画出矩形
tem_img=img.copy()
rect=cv2.rectangle(tem_img,top_left,bottom_right,255,2)#因为这是灰度图,不需要制定BGR,只写255即可
cv2.imshow('rect',rect)
cv2.waitKey(10)
cv2.destroyAllWindows()


#匹配多个对象
#可应用与人脸匹配,虽然一般来说人脸匹配用机器人学习的方法来做。
#通过阈值方法实现多目标匹配
thresh=0.2#方差归一化,值越小匹配度越高。
loc=np.where(res<thresh)
#*loc分解后得到两个参数
print(w,h)
hand_img=img.copy()

for i in list(zip(*loc[::1])):#对loc倒序后解包(因为原来loc坐标为y,x),再zip
    bottom_right=(i[0]+w,i[1]+h)
    rect_m=cv2.rectangle(hand_img,i,bottom_right,0,2)
cv2.imshow('hand_img',hand_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

  

 np.where()

 多对象匹配,通过阈值实现

 

标签:匹配,img,res,cv2,opencv,shape,模板
From: https://www.cnblogs.com/tanyuanqing/p/17487756.html

相关文章

  • 单模字符串匹配算法(KMP, exKMP, manacher)
    约定:本文字符串均从\(1\)开始。模式串\(T\)的长度为\(n\),匹配串\(S\)的长度为\(m\)。1.KMP1.1前缀函数给定一个长度为\(n\)的字符串\(S\),其前缀函数被定义为一个长度为\(n\)的数组\(\pi\)。其中\(\pi_i\)被定义为:若子串\(S[1\cdotsi]\)有一对相等的真前......
  • 字符串的模式匹配算法
    一.模式匹配字符串的模式匹配算法是用来查找一个字符串中是否存在另一个指定的字符串(即模式)的算法。常见的模式匹配算法包括暴力匹配算法、KMP算法、Boyer-Moore算法和Rabin-Karp算法。暴力匹配算法:暴力匹配算法也称为朴素匹配算法,是最简单的一种字符串匹配算法。它从主串的第一个......
  • 基于uniapp+vite4+vue3搭建跨端项目|uni-app+uview-plus模板
    最近得空学习了下uniapp结合vue3搭建跨端项目。之前也有使用uniapp开发过几款聊天/仿抖音/后台管理等项目,但都是基于vue2开发。随着vite.js破局出圈,越来越多的项目偏向于vue3开发,就想着uniapp搭配vite4.x构建项目效果会如何?经过一番尝试果然真香~版本信息HBuilderX:3.8.4Vite......
  • NOIP2020 T2 字符串匹配【题解】
    NOIP2020T2字符串匹配首先声明这篇题解存在大多数让我这种人看懂的废话,如果想要速通,请另寻他解题目简化定义字符串乘法为\(AB\)为把两个字符串拼起来,定义阶乘\(A^i\)表示\(\prod_{1}^iA\)再定义\(F(S)\)为\(S\)中出现奇数次字符的数量现给定一个字符串\(S\),求......
  • 网络流模板-网络单纯形
    最小费用最大流,但能过HLPP板子题,还能处理负环namespaceflow{//}{{{typedeflonglongll;constexprintV=5e3,E=5e4;constexprintEDGE_NIL=0;structEdge{ intto; lllf,cost; intnxt;}es[E*2+4];llsumcost=0,sumflow=0;intis,it,iv;llm......
  • Python设计模式-22-模板模式
    模板模式是一种行为型设计模式,它定义了一个算法的骨架,将一些步骤延迟到子类中实现。模板模式通常包括以下几个角色:抽象类(AbstractClass):定义了一个算法的骨架,其中包含一些抽象方法,用于延迟到子类中实现。具体类(ConcreteClass):实现了抽象类定义的接口,并实现了其中的抽象方法......
  • 仿喜茶GO小程序前端模板源码,奶茶店微信小程序源码
    本项目包含:首页点单喜茶百货百货详情历史订单我的积分商城积分商城详情页我的-微信一键登录我的-成为星球会员我的-个人资料我的-钱包我的-阿喜有礼会员码任务中心下载地址点击下载仿喜茶小程序源码运行效果图 ......
  • .net core使用Html模板转PDF文件并下载的业务类封装
    前言:我这里文件下载的模板选型优先考虑html模板,上手容易,前后端通用,有了模板后就需要有转换了,html转PDF采用第三方包:SelectPdf,下面是代码核心类: 1-PDFService:usingMicrosoft.AspNetCore.Hosting;usingSelectPdf;namespaceMeShop.Domain.PDF{///<summary......
  • 仿奈雪の茶小程序,奶茶小程序模板源码(附下载链接)
    分享一个仿奈雪の茶小程序,奶茶小程序模板源码(兼容H5版本全网首发)完美复刻奈雪の茶小程序,可稍加修改使用。代码结构如下本项目包含:首页点餐(自取和外卖两种方式,有基本的点餐逻辑处理)取餐我的积分商城积分商城详情页积分签到会员码我的卡券收货地址我的资料我的订......
  • 基于Jekyll的博客模板
    概述基于Jekyll的博客模板,清爽配色,简约风格。详细效果环境配置环境Windows10GitBash安装ruby下载rubyinstaller安装:https://rubyinstaller.org/downloads/ (推荐Ruby2.2.6版本)$ruby-v安装DevKit下载DevKit.exe:https://rubyinstaller.org/downloads/ ,解压......