百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

opencv(2)--模版匹配

bigegpt 2024-11-20 12:38 4 浏览

0、参考

(1)不错:https://blog.csdn.net/cyy1104/article/details/130314183

1、概念

模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术。模板匹配不是基于直方图的,而是通过在输入图像上滑动图像块(模板)同时对比相似度,来对模板和输入图像进行匹配的一种方法。主要应用场合:

  • (1)目标查找定位
  • (2)运动物体跟踪

2matchTemplate函数

2.1函数定义

(1)函数定义如下

	cv.matchTemplate(	image, templ, method[, result[, mask]]	) ->	result

(2)官方定义如下https://docs.opencv.org/

(3)参数说明

  • image:待搜索图像(大图)
  • templ:搜索模板,需和原图一样数据类型且尺寸大小不能大于源图像
  • reuslt:比较结果的映射图像,其必须为单通道的,32位浮点型图像。如果原图(待搜索图像)尺寸为W*H,而templ的尺寸为w*h,则result的尺寸一定是(W-w+1)*(H-h+1)。

2.2匹配方法

上述函数中(method)的匹配方法有有如下六种

  • 1 TM_SQDIFF --- 平方差匹配法(最好匹配0)
  • 2 TM_SQDIFF_NORMED --- 归一化平方差匹配法(最好匹配0)
  • 3 TM_CCORR --- 相关匹配法(最坏匹配0)
  • 4 TM_CCORR_NORMED ---归一化相关匹配法(最坏匹配0)
  • 5 TM_CCOEFF --- 系数匹配法(最好匹配1)
  • 6 TM_CCOEFF_NORMED --- 归一化系数匹配法(最好匹配1)

官方的定义如下

https://docs.opencv.org/4.8.0/df/dfb/group__imgproc__object.html#ga3a7850640f1fe1f58fe91a2d7583695d

2.2.1 TM_SQDIFF

平方差匹配 method=TM_SQDIFF:最好匹配为0,匹配越差,匹配值越大。python写法为:cv.TM_SQDIFF

2.2.2 TM_SQDIFF_NORMED

标准平方差匹配 method=TM_SQDIFF_NORMED。Python写法为: cv.TM_SQDIFF_NORMED

2.2.3 TM_CCORR

相关匹配 method=TM_CCORRPython写法为: cv.TM_CCORR

2.2.4 TM_CCORR_NORMED

标准相关匹配 method=TM_CCORR_NORMEDPython写法为: cv.TM_CCORR_NORMED

2.2.5 TM_CCOEFF

系数匹配 method=TM_CCOEFFPython写法为: cv.TM_CCOEFF

2.2.6 TM_CCOEFF_NORMED

归一化系数匹配method=TM_CCOEFF_NORMEDPython写法为: cv.TM_CCOEFF_NORMED

3.normalize函数

3.1作用

该函数的作用是进行矩阵归一化。

3.2函数说明

(1)函数

cv.normalize(	src, dst[, alpha[, beta[, norm_type[, dtype[, mask]]]]]	) ->	dst

(2)官方说明https://opencv.org/

(3)参数说明

  • src:输入源图像,Mat类型
  • dst:输出结果图像,需要和原图一样的尺寸和类型
  • alpha:归一化后的最小值,默认为1
  • beta:归一化后的最大值,默认为0
  • norm_type:归一化类型,可选:NORM_INF, NORM_L1, NORM_L2(默认)等
  • dtype:默认值为-1,此参数为负值时,输出矩阵和src有同样的类型
  • mask:可选的掩码操作

4.minMaxLoc()函数

4.1作用

minMaxLoc()函数的作用是在数组中找到全局最小值和最大值

4.2函数说明

(1)定义

cv.minMaxLoc(	src[, mask]	) ->	minVal, maxVal, minLoc, maxLoc

(2)官方定义

(3)参数说明

  • src:输入源图像,单通道图像
  • minVal:返回最小值的指针,若无需返回,则置为0
  • maxVal:返回最大值的指针,若无需返回,则置为0
  • minLoc:返回最小位置的指针,若无需返回,则置为0
  • maxLoc:返回最大位置的指针,若无需返回,则置为0
  • mask:可选的掩码操作

5.模版匹配的测试代码

(1)测试代码

import cv2
import numpy as np


if __name__ == '__main__':
    # 读取图像和模板
    img = cv2.imread('Src2.jpg',0)
    template = cv2.imread('template2.jpg',0)
    # template = cv2.imread('template1_2.jpg',0)
    # template = cv2.imread('template1.jpg',0)
    w, h = template.shape[::-1]

    # 模板匹配
    result = cv2.matchTemplate(img,template,cv2.TM_CCOEFF_NORMED)

    #归一化 到0-1范围
    result = cv2.normalize(result, None, 0, 1.0, cv2.NORM_MINMAX, dtype=cv2.CV_32F)

    # 找到最佳匹配
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
    top_left = max_loc
    bottom_right = (top_left[0] + w, top_left[1] + h)

    # 在原图中绘制矩形框
    cv2.rectangle(img,top_left, bottom_right, 255, 2)

    # 显示结果
    cv2.imshow('Matched image',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

(2)测试结果

相关推荐

悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)

新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...

高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源

凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...

微服务架构实战:商家管理后台与sso设计,SSO客户端设计

SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...

还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑

在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...

Seata源码—6.Seata AT模式的数据源代理二

大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...

30分钟了解K8S(30分钟了解微积分)

微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...

SpringBoot条件化配置(@Conditional)全面解析与实战指南

一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...

一招解决所有依赖冲突(克服依赖)

背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...

你读过Mybatis的源码?说说它用到了几种设计模式

学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...

golang对接阿里云私有Bucket上传图片、授权访问图片

1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...

spring中的资源的加载(spring加载原理)

最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...

Android资源使用(android资源文件)

Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...

如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)

深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...

@Autowired与@Resource原理知识点详解

springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...

java的redis连接工具篇(java redis client)

在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...