opencv实战项目二十二:模板匹配定位对象位置

news2024/9/26 3:26:43

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、opencv模板匹配介绍
  • 二、使用代码
  • 三、效果


前言

在现代计算机视觉领域,模板匹配是一种基础而强大的技术,它能够帮助我们在图像中找到预定义的形状或模式。OpenCV作为Python中广泛使用的计算机视觉库,提供了丰富的API来支持这一功能。在这篇博客中,我们将探讨OpenCV中的cv2.matchTemplate函数,它是一个核心的模板匹配工具,用于在图像中寻找与模板图像相匹配的区域。我们将通过具体的代码示例来演示这一过程,帮助读者更好地理解和掌握OpenCV中模板匹配的用法。

一、opencv模板匹配介绍

模板匹配(Template Matching)是一种在图像处理和计算机视觉中常用的技术,它涉及到在给定的图像中搜索与预定义的模板图像相似的区域。这种技术通常用于图像识别、物体检测、医学图像分析等领域。其基本原理是使用一个较小的图像(模板)作为参考,然后在另一个较大的图像(搜索图像)中滑动这个模板,比较模板与搜索图像重叠区域之间的相似性。这种相似性可以通过不同的方法来计算,如相关性、平方差等。在opencv中集成了蒙版匹配的api:cv2.matchTemplate
cv2.matchTemplate 是 OpenCV 库中的一个函数,它用于在给定的图像中搜索与预定义模板图像相似的区域。这个函数在图像处理和计算机视觉领域中非常有用,特别是在物体检测、图像识别和医学图像分析等方面。以下是 cv2.matchTemplate 函数的详细介绍:cv2.matchTemplate(image, template, method)

输入参数:
image: 待搜索的图像,通常是一个较大的图像。
template: 用于匹配的模板图像,通常是一个较小的图像。
method: 用于比较模板和搜索图像的匹配方法。
其中OpenCV 提供了多种method,每种方法都有其特定的应用场景:
cv2.TM_CCOEFF: 相关系数匹配,适合于检测物体。
cv2.TM_CCOEFF_NORMED: 归一化的相关系数匹配,适合于检测物体。
cv2.TM_CCORR: 相关性匹配,适合于检测特征。
cv2.TM_CCORR_NORMED: 归一化的相关性匹配,适合于检测特征。
cv2.TM_SQDIFF: 平方差匹配,适合于检测特征。
cv2.TM_SQDIFF_NORMED: 归一化的平方差匹配,适合于检测特征。

函数返回一个结果矩阵 result,其中每个元素表示模板图像与搜索图像相应位置匹配的结果。这个结果矩阵是一个二维数组,其中每个元素代表模板图像在搜索图像中的一个位置(行和列)与模板图像的匹配程度。结果矩阵的形状与搜索图像的形状相同,但是它的每个元素是一个浮点数,表示模板图像与搜索图像相应位置的匹配度。这个匹配度可以是相关系数、相关性、平方差等,具体取决于 method 参数的选择。

二、使用代码

import cv2
import numpy as np

# 读取图像和模板
image = cv2.imread(r'F:\cv_traditional\R-C (3).jfif', cv2.IMREAD_COLOR)
template = cv2.imread(r'F:\cv_traditional\R-C (3).png', cv2.IMREAD_COLOR)

# 将图像和模板转换为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray_template = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)

# 应用模板匹配
method = cv2.TM_CCOEFF_NORMED  #  : 归一化的相关系数匹配,适合于检测物体
result = cv2.matchTemplate(gray_image, gray_template, method)

# 查找最佳匹配位置
threshold = 0.9 # 设置一个阈值来确定匹配的可靠性
loc = np.where(result >= threshold)

# 遍历所有匹配位置
for pt in zip(*loc[::-1]):
    # 在原图上绘制矩形框
    cv2.rectangle(image, pt, (pt[0] + template.shape[1], pt[1] + template.shape[0]), (0, 0, 255), 2)
image=cv2.resize(image,(0,0),fx=0.5,fy=0.5)
# 显示结果
cv2.imshow('Matched', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

三、效果

原图:在这里插入图片描述

蒙版图:在这里插入图片描述

匹配结果图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2121216.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k8s服务发布Ingress

Kubernetes暴露服务的方式目前只有三种:LoadBlancer Service、NodePort Service、Ingress,通俗来讲,ingress和之前提到的Service、Deployment,也是一个k8s的资源类型,ingress用于实现用域名的方式访问k8s内部应用。 In…

第 6 章图像聚类

本章将介绍几种聚类方法,并展示如何利用它们对图像进行聚类,从而寻找相似的图像组。聚类可以用于识别、划分图像数据集,组织与导航。此外,我们还会对聚类后的图像进行相似性可视化。 6.1 K-means聚类 K-means 是一种将输入数据划…

FLV 格式详解资料整理,关键帧格式解析写入库等等

FLV 是一种比较简单的视频封装格式。大致可以分为 FLV 文件头,Metadata元数据,然后一系列的音视频数据。 资料够多: FLV格式解析图 知乎用户 Linux服务器研究 画了一张格式解析图,比较全,但默认背景是白色&#xff…

2024年职业院校人工智能实训室方案解读(融入AIGC技术)

随着人工智能技术的飞速发展,职业院校作为技能型人才培养的重要基地,亟需加强人工智能实训室的建设,以应对市场需求和行业变革。该方案不仅涵盖了全面的人工智能教学内容,还融入了AIGC(Artificial Intelligence Genera…

k8s笔记——kubebuilder实战

kubebuilder Kubebuilder 是一个基于 CRD 来构建 Kubernetes API 的框架,可以使用 CRD 来构建 API、Controller 和 Admission Webhook。 动机 目前扩展 Kubernetes 的 API 的方式有创建 CRD、使用 Operator SDK 等方式,都需要写很多的样本文件&#x…

​微图在线显示高程为什么与下载结果不一致

之前有客户向我们提出了在线显示的高程值和下载的数据高程值不一致的问题,这里解释一下不一致的原因。 在线显示 在线的情况分成两种,一种是浏览高程数据渲染地图,一种是非高程数据渲染地图,例如高清影像(WGS84&…

小小GCD、LCM拿下拿下

目录 最大公约数(GCD) 最大公约数(GCD)求解: 一、辗转相除法 二、三目运算符 三、位运算 最大公约数(GCD)模板: 最大公约数(GCD)例题: 最…

SprinBoot+Vue酒店管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…

安宝特方案 | 医疗AR眼镜,重新定义远程会诊体验

【AR眼镜:重新定义远程会诊体验】 在快速发展的医疗领域,安宝特医疗AR眼镜以其尖端技术和创新功能,引领远程会诊的未来,致力于为为医生和患者带来更高效、精准和无缝的医疗体验。 探索安宝特医疗AR眼镜如何在医疗行业中引领新风潮…

DolphinScheduler应用实战笔记

DolphinScheduler应用实战笔记 一、前言二、DS执行SQL或存储过程二、DS调用DataX同步数据三、DS调用HTTP接口四、DS依赖(DEPENDENT)节点五、DS SPARK 节点六、DS Flink 节点七、DS Flink 节点八、DS SQL 节点九、DS Java程序十、DS Python节点 一、前言 DolphinScheduler&…

Java实现在线聊天室

分为客户端和服务器端两个部分。服务器负责处理客户端之间的通信,客户端则提供一个用户界面来发送和接收消息。 技术栈 Java语言SocketSwingUI 要点 一个服务端,多台客户端每个客户端登录时输入用户名消息格式化:服务器接收到消息时&#…

数据资产管理:真能推动数据要素市场发展还是只是空谈?

数据资产管理:真能推动数据要素市场发展还是只是空谈? 前言数据资产管理 前言 数据已成为企业和组织的重要资产,其价值的充分发挥对于推动业务发展和提升竞争力至关重要。数据资产管理作为一种有效的管理手段,正逐渐受到广泛关注…

Open Source, Open Life 第九届中国开源年会论坛征集正式启动

中国开源年会 COSCon 是业界最具影响力的开源盛会之一,由开源社在2015年首次发起,而今年我们将迎来第九届 COSCon! 以其独特定位及日益增加的影响力,COSCon 吸引了越来越多的国内外企业、高校、开源组织/社区的大力支持。与一般企…

java基础(1)数据类型,运算符,逻辑控制语句以及基本应用

目录 ​编辑 1.前言 2.正文 2.1数据类型与变量 2.1.1字面常量 2.1.2数据类型 2.1.3变量 2.1.3.1整型 2.1.3.2浮点型 2.1.3.3字符型 2.1.3.4布尔型 2.1.4类型转换与类型提升 2.1.4.1字符串的拼接 2.1.4.2整型转字符串 2.1.4.3字符串转整数 2.2运算符 2.2.1算术运…

小红书笔记数单日突破1.3万,8月全网都被这只猴子刷屏了!

8月20日早上10点,《黑神话:悟空》正式发布后立刻席卷全网,众多玩家在游戏正式发布后火速进入游戏界面,甚至有多家公司宣布放假让员工玩《黑神话悟空》,不论是玩游戏的、还是不玩游戏的,都为之献上巨大的关注…

一个让LLM更具创造力的“超级提示词“

1. “超级提示词” 开源项目简介 Github 上最近开源了一个名为 “超级提示词” (Super Prompt) 的项目,该项目旨在激发大语言模型(LLM)的创造力和发散思维。通过输入这些提示词,LLM 能够生成更多新颖的想法,对于需要创…

Linux网络:总结协议拓展

1. TCP/IP四层模型总结 2. 网络协议拓展 DNS协议(地址解析协议) TCP/IP使用IP地址和端口号来确定网络中一台主机的一个程序。 但是这样标定不方便记忆,于是开始引出主机名(字符串),使用hosts文件来描述…

Monte Carlo方法解决强化学习问题

本文继续深入探讨蒙特卡罗 (MC)方法。这些方法的特点是能够仅从经验中学习,不需要任何环境模型,这与动态规划(DP)方法形成对比。 这一特性极具吸引力 - 因为在实际应用中,环境模型往往是未知的,或者难以精确建模转移概率。以21点游戏为例:尽管我们完全理解游戏规则,但通过DP方…

智慧教室无纸化同屏方案是否适用RTMP?

智慧教室无纸化方案技术背景 智慧教室无纸化方案是一种基于现代信息技术,旨在通过数字化手段实现教学过程的无纸化、智能化和高效化的解决方案。该方案以学生为中心,强调互动化的数字教学服务,旨在提升教学质量和学习效率,同时减…

SprinBoot+Vue宠物店管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…