OpenCV-模板匹配多个目标

news2024/9/27 9:23:38

文章目录

  • 一、基本概念
  • 二、基本步骤
    • 1.图像准备
    • 2.图像预处理
    • 3.执行模板匹配
    • 4.定位匹配区域
    • 5.处理多个匹配
    • 6.优化和验证
  • 三、代码实现
    • 1.图片读取
    • 2.图像预处理
    • 3.模板匹配
    • 4.绘制矩形框
  • 三、总结

模型匹配(Model Matching)是一个广泛应用的概念,其具体含义和应用领域会根据上下文的不同而有所变化。

一、基本概念

模型匹配是指通过比较待匹配的数据或对象与已有的模型之间的相似度或距离,来寻找最佳匹配的过程。这种方法在多个领域都有广泛应用,包括但不限于图像处理、数据分析、控制系统设计、自然语言处理等。

二、基本步骤

1.图像准备

  • 模板图像:需要被匹配的目标图像,通常是一个较小的图像块。
  • 输入图像:在其中进行搜索以找到与模板图像相似的多个区域的图像。

2.图像预处理

  • 转换为灰度图像:在进行模板匹配之前,通常需要将输入图像和模板图像转换为灰度图像,因为灰度图像中的像素值仅表示亮度,不受颜色影响,更适合进行匹配。
  • 降噪和增强:根据需要,可以对图像进行降噪处理以提高匹配准确性,或进行增强处理以突出目标特征。

3.执行模板匹配

  • 使用模板匹配算法(如OpenCV中的cv2.matchTemplate()函数)在输入图像中搜索与模板图像相似的区域。
  • 模板匹配算法会生成一个结果图像,其中每个像素的值表示该位置与模板图像的匹配程度。

4.定位匹配区域

  • 使用cv2.minMaxLoc()等函数在结果图像中找到匹配度最高的区域(或多个区域,如果设置了适当的阈值)。
  • 根据匹配位置在原图中绘制矩形框或其他标记,以指示匹配到的目标。

5.处理多个匹配

  • 如果需要匹配多个目标,并且这些目标在图像中可能以不同的尺寸、方向或旋转角度出现,则可能需要使用更复杂的算法,如尺度不变特征变换(SIFT)、加速稳健特征(SURF)或ORB等。
  • 对于简单的多目标匹配,可以通过设置较低的匹配阈值来找到多个匹配区域,并分别处理它们。

6.优化和验证

  • 根据需要调整模板匹配算法的参数(如匹配方法、阈值等),以优化匹配结果。
  • 对匹配结果进行验证,确保它们确实是所需的目标,并排除误匹配。

三、代码实现

下面是一个图片的模板匹配,要进行输入的图片定为a.png,旁边就是要匹配的目标图片我们定为1.png。在这一张图片中存在多个目标,所有我们需要对目标图片1.png进行相关处理,例如旋转等操作。下面让我们来展示一下代码片段。
在这里插入图片描述

1.图片读取

import cv2
import numpy as np

img_rgb = cv2.imread('a.png')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread('1.png', 0)
  • 读取输入图片与模板图片,并将输入图片进行灰度处理。

2.图像预处理

# 旋转模板
rotated_image1 = cv2.rotate(template, cv2.ROTATE_90_CLOCKWISE)  # 顺时针90°
rotated_image2 = cv2.rotate(template, cv2.ROTATE_90_COUNTERCLOCKWISE)  # 逆时针90°
h, w = template.shape[:2]
  • 这里我们对模板图片进行处理,通过cv2.ROTATE_90_CLOCKWISE与cv2.ROTATE_90_COUNTERCLOCKWISE操作对图片进行顺时针旋转90°和逆时针旋转90°操作。并取其对应的高宽。

3.模板匹配

# 使用模板匹配的方法,cv2.matchTemplate 进行模板匹配
res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
res1 = cv2.matchTemplate(img_gray, rotated_image1, cv2.TM_CCOEFF_NORMED)
res2 = cv2.matchTemplate(img_gray, rotated_image2, cv2.TM_CCOEFF_NORMED)
  • 使用cv2.matchTemplate()在输入图像中搜索与模板图像相似的区域。

4.绘制矩形框

# 设定匹配阈值
threshold = 0.9
# 获取匹配结果中所有符合阈值的点的坐标
for i in (res, res1, res2):
    loc = np.where(i > threshold)
# 遍历所有的匹配点
    for pt in zip(*loc[::-1]):
        # 在原图上绘制匹配区域的矩形框
        cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 1)

cv2.imshow('a.png', img_rgb)
cv2.waitKey(0)

设定阈值,并获取结果中所有符合阈值的点的坐标,然后进行遍历,在原图上进行图像绘制,绘制矩阵框,并显示最终结果。
在这里插入图片描述

三、总结

本次主要讲述了模型匹配多个目标的方法过程,通过对模型匹配进行进一步讲解,然后对其方法进行介绍与举例,为大家展示了匹配多个目标的案例,通过对模板图像进行旋转等一系列操作,让其与输入图像中的各个区域相匹配,最终将匹配结果进行绘制矩阵框展示,为大家展示了具体效果。

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

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

相关文章

练练演活姜迎紫 入围金鹰奖提名演技派实至名归

近日,悬疑剧《雪迷宫》正在CCTV-8热播,演员练练凭借其精湛的演技演活姜迎紫一角,塑造的大嫂形象深入人心,赢得了观众的一致好评,成为该剧的一大亮点,成功闯入“内娱大嫂”的赛道。而近日,练练也…

贪心+滑窗+递推,LeetCode 2555. 两个线段获得的最多奖品

一、题目 1、题目描述 2、接口描述 python3 ​ class Solution:def maximizeWin(self, prizePositions: List[int], k: int) -> int:cpp ​ class Solution { public:int maximizeWin(vector<int>& prizePositions, int k) {int n prizePositions.size();std…

windows通过wsl2安装linux系统之Ubuntu,傻瓜式安装

期望通过每一次分享&#xff0c;让技术的门槛变低&#xff0c;落地更容易。 —— around 目录 1.基础环境和要求2.安装wsl23.安装linux系统4.迁移linux系统挂载5.配置linux账号密码6.配置ssh登录方式待续… 前言 为什么要在windows上安装linux&#xff0c;这个问题当你是研发…

Kubernetes动态分配存储卷组件 nfs-subdir-external-provisioner

Kubernetes动态分配存储卷组件 nfs-subdir-external-provisioner 存储组件 nfs-subdir-external-provisioner 是一个存储资源自动调配器&#xff0c;它可用现有的 NFS 服务器通过持久卷声明来支持 Kubernetes 持久卷的动态分配&#xff0c;自动创建的文件夹将被命名为 n a m …

Note24091101_基恩士日期获取相关测试01

基恩士日期获取相关测试 1、SEC和RSEC的使用&#xff1a; 资料如图&#xff1a; 要点提示&#xff1a;SEC和RSEC成对使用。 日期转秒&#xff0c;秒转日期测试如图所示&#xff1a; 2. LDWK与LDWKB星期接点的使用示例&#xff1a; 资料如图&#xff1a; 仿真如图&…

chapter14-集合——(List)——day18

目录 518-Set接口方法 518-Set接口方法

Rickdiculously Easy靶场渗透测试

靶机下载地址 https://www.vulnhub.com/entry/rickdiculouslyeasy-1,207/ 一.信息收集 1.端口扫描 nmap 172.16.1.20 -p- -sV 发现还扫描出一个flag 2.目录扫描 二.获取shell和提权 1、访问靶机IP地址 2、拼接并访问robots.txt文件 3、逐个访问&#xff0c;发现cgi-bin/tr…

‌移动管家手机智能控制汽车系统

‌ 手机可以通过下载特定的应用程序来控制汽车系统&#xff0c;实现远程启动、锁/解锁车门、调节车内温度等功能。‌ ‌ 手机智能控制汽车系统主要通过下载并安装特定的APP来实现。‌ 首先&#xff0c;用户需要确定自己的手机系统是安卓还是苹果版&#xff0c;然后前往应用…

图像和文本统一识别

图像和文本统一识别&#xff08;UNIT&#xff09;是一种尝试将图像识别和文本识别任务统一到单一模型中的技术。这种方法的目标是提高模型在处理包含文本信息的图像时的效率和准确性&#xff0c;从而使模型能够更好地理解和处理视觉内容中的文本信息。 使用的技术&#xff1a;…

浮毛危害人体健康?希喂、安德迈、有哈宠物空气净化器吸毛测评

养宠之前了解清楚相关的知识&#xff0c;这既是对宠物负责&#xff0c;也是对我们自己负责。宠物最让铲屎官头疼的就是毛发问题&#xff0c;大量脱落的毛发会带来繁重的清理任务&#xff0c;同时飘在空中浮毛还是潜藏在身边的健康”杀手“。浮毛微小、质量轻&#xff0c;容易随…

JAVA 使用POI实现单元格行合并生成

预期效果 maven引用 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></dependency>Java代码实现 功能实现 private boolean callExcel(List<MColumnValueVo&g…

Nignx 增加权限(windows)

Nignx 增加权限&#xff08;windows&#xff09; 1、nginx增加权限配置 问题描述&#xff1a; windows下路径含有空格和路径符号产生的问题 server {listen 9025;server_name localhost;# 验证时的提示信息auth_basic "请输入用户和密码"; # 认证文件auth_b…

鸿蒙界面开发——组件(7):组件导航 页面路由

组件导航 (Navigation)(推荐) Navigation() Navigation(pathInfos: NavPathStack)Navigation是路由容器组件&#xff0c;一般作为首页的根容器&#xff0c;包括单栏(Stack)、分栏(Split)和自适应(Auto)三种显示模式。Navigation组件适用于模块内和跨模块的路由切换&#xff0c…

【论文阅读笔记】Tackling the Generative Learning Trilemma with Denoising Diffusion GANs

【论文阅读笔记】Tackling the Generative Learning Trilemma with Denoising Diffusion GANs Introduction方法 使用传统GANS建模去噪分布理解模式覆盖率 Paper&#xff1a;https://arxiv.org/abs/2112.07804 Code&#xff1a;https://github.com/NVlabs/denoising-diffusion-…

大模型LLM部署学习

1、推理工具vLLM vLLM使用指北 https://zhuanlan.zhihu.com/p/685621164 VLLM官方文档 Welcome to vLLM! — vLLM 2、RAG&#xff08;检索增强生成&#xff09; https://zhuanlan.zhihu.com/p/675509396 RAG就是通过检索获取相关的知识并将其融入Prompt&#xff0c;让大模…

企业预算管理的数字化转型

在当今激烈的市场竞争中&#xff0c;企业面临着前所未有的挑战&#xff0c;尤其在成本控制和资源配置方面&#xff0c;预算管理成为企业成功运营的关键。然而&#xff0c;传统的预算管理方式&#xff0c;尤其依赖于Excel等工具的操作&#xff0c;随着企业规模的扩大和业务复杂度…

13步指南:如何建立品牌社区(附真实案例)

如果你正在寻找增强客户忠诚度、降低营销费用&#xff0c;并直接从客户那边获取创新想法的方法&#xff0c;那么创建一个品牌社区可能非常适合你。在这里&#xff0c;我们还推荐使用光年AI&#xff0c;将两者结合可以事半功倍。 例如&#xff0c;丝芙兰的美妆爱好者社区自2017…

SAP Fiori UI5-环境搭建-2022-2024界面对比

文章目录 一、Fiori项目初始化实际操作第一步&#xff1a;新建文件夹&#xff08;项目文件&#xff09;第二步&#xff1a;打开我们项目第三步&#xff1a;打开终端 部署环境第四步: XML中新增文本 二、 2023年Vscode中Fiori界面三 、2024年Vscode中Fiori界面 一、Fiori项目初始…

上海徐汇区开启大模型备案奖励申报

上海徐汇区开启大模型备案奖励申报 徐汇区作为全国首批人工智能战略性新兴产业集群&#xff0c;敏锐地抓住了通用人工智能的变革趋势和产业风口&#xff0c;率先打造了全国首个大模型创新生态社区“模速空间”&#xff0c;并创建了上海人工智能大模型创新生态集聚区。为了进一步…

2024伊语IM即时通讯源码/im商城系统/纯源码IM通讯系统安卓+IOS前端纯原生源码

一、端口说明、域名解析及服务器配置要求 1.1端口说明 使用二级域名映射的情况下 使用端口说明3306数据导入是可以开放 后期关闭 或者直接在服务器上面导入6379不用对外开放9903需要开放80需要开放 1.2 子域名说明&#xff1a; api.xxx.com接口 im.xxx.com通讯 web.xxx.…