问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

目标跟踪(3)MultiTracker : 基于 OpenCV (C++/Python) 的多目标跟踪

发布网友 发布时间:2022-08-26 14:04

我来回答

1个回答

热心网友 时间:2024-10-18 22:38

在这篇文章中,我们将介绍如何使用通过 MultiTracker 类实现的 OpenCV 的多对象跟踪 API。我们将共享C++ 和 Python 代码。


大多数计算机视觉和机器学习的初学者都学习对象检测。如果您是初学者,您可能会想为什么我们需要对象跟踪。我们不能只检测每一帧中的对象吗?

让我们来探究一下跟踪是有用的几个原因。

首先,当在视频帧中检测到多个对象(例如人)时,跟踪有助于跨帧建立对象的身份。

其次,在某些情况下,对象检测可能会失败,但仍可能跟踪对象,因为跟踪考虑了对象在前一帧中的位置和外观。

第三,一些跟踪算法非常快,因为它们做的是局部搜索,而不是全局搜索。因此,我们可以通过每n帧进行目标检测,并在中间帧中跟踪目标,从而为我们的系统获得很高的帧率。

那么,为什么不在第一次检测后无限期地跟踪对象呢?跟踪算法有时可能会丢失它正在跟踪的对象。例如,当对象的运动太大时,跟踪算法可能跟不上。许多现实世界的应用程序同时使用检测和跟踪。

在本教程中,我们只关注跟踪部分。我们想要跟踪的对象将通过拖动它们周围的包围框来指定。

OpenCV 中的 MultiTracker 类提供了多目标跟踪的实现。它是一个简单的实现,因为它独立处理跟踪对象,而不对跟踪对象进行任何优化。

让我们逐步查看代码,了解如何使用 OpenCV 的多目标跟踪 API。

2.1 第 1 步:创建单一对象*

多目标*只是单目标*的集合。我们首先定义一个函数,该函数接受一个*类型作为输入,并创建一个*对象。OpenCV有8种不同的*类型:BOOSTING, MIL, KCF,TLD, MEDIANFLOW, GOTURN, MOSSE, CSRT。

如果您想使用 GOTURN *,请务必阅读这篇文章并下载 caffe 模型。

在下面的代码中,给定*类的名称,我们返回*对象。这将在稍后用于多目标*。

Python


C++


2.2 第 2 步:读取视频的第一帧

多目标*需要两个输入

给定这些信息,*在所有后续帧中跟踪这些指定对象的位置。 在下面的代码中,我们首先使用 VideoCapture 类加载视频并读取第一帧。这将在稍后用于初始化 MultiTracker。

Python


C++


2.3 第 3 步:在第一帧中定位对象

接下来,我们需要在第一帧中定位我们想要跟踪的对象。该位置只是一个边界框。 OpenCV 提供了一个名为 selectROI 的函数,该函数会弹出一个 GUI 来选择边界框(也称为感兴趣区域 (ROI))。 在 C++ 版本中,selectROI 允许您获取多个边界框,但在 Python 版本中,它只返回一个边界框。所以,在 Python 版本中,我们需要一个循环来获取多个边界框。 对于每个对象,我们还选择一种随机颜色来显示边界框。 代码如下所示。

Python


C++

getRandomColors 函数相当简单

2.4 第 3 步:初始化 MultiTracker

到目前为止,我们已经读取了第一帧并获得了对象周围的边界框。这就是我们初始化多目标*所需的所有信息。

我们首先创建一个 MultiTracker 对象,并向其中添加与边界框一样多的单个对象*。在此示例中,我们使用 CSRT 单对象*,但您可以通过将下面的 trackerType 变量更改为本文开头提到的 8 个*之一来尝试其他*类型。 CSRT *不是最快的,但在我们尝试的许多情况下它产生了最好的结果。

您还可以使用包裹在同一个 MultiTracker 中的不同*,但当然,这没什么意义。

MultiTracker 类只是这些单个对象*的包装器。正如我们从上一篇文章中知道的那样,单个对象*是使用第一帧初始化的,并且边界框指示我们想要跟踪的对象的位置。 MultiTracker 将此信息传递给它在内部包装的单个对象*。

Python


C++


2.5 第 4 步:更新 MultiTracker 并显示结果

最后,我们的 MultiTracker 已准备就绪,我们可以在新帧中跟踪多个对象。我们使用 MultiTracker 类的 update 方法来定位新框架中的对象。每个跟踪对象的每个边界框都使用不同的颜色绘制。

Python


C++


C++


Python


声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
翼卡车联网的智能交通服务?? 全国中学生英语能力竞赛有奖项吗? 英语竞赛省一等奖有什么用 怎么挑选吉娃娃的狗粮 挑选吉娃娃的狗粮注意事项 选购吉娃娃的2个注意事项 43-6等于多少 ...把减数34看出去了43,计算出来的差是37,正确差是多少? a+b=43 a+c=37 b+c=40求a、b、c各等于多少 43是百分之37,百分之八十是多少? 本月是37例,上个月是43例,上年同期是26例 问:与上期相比下降百分之多少... 并联电路是什么 联名国债是什么意思?和普通国债有什么区别? 水果上的农药怎么洗掉 蟹肉煮丝瓜怎么做 螃蟹可以和丝瓜煮吗? 家里发生火灾时怎么办 华为手机WKG-AN00适合多少W的充电器? 辅警可以调解民事纠纷吗 辅警可以调查取证吗 辅警可以审经济案吗 辅警可以抓捕嫌疑人吗 辅警有执法权吗? 辅警可以处理案件吗 众人所知互帮互助的故事 梦见自己会飞可以控制高低 ...热水器多少升合适?燃气热水器安装需要注意哪些事项? 新手骑摩托车有哪些注意事项? 梦想是遥远的星辰大海下一句 惠州哪有华为u8500手机套和贴膜卖 惠州市惠城区哪里有贴膜的!要贴大膜的!是MP4的 怎么做演讲稿? 华为畅享10plus怎么把演讲稿做成一个文件? 老是提示风险该怎么解决 新申请的有风险提示怎么办 为什么给别人发信息会出现风险提示? 巴西红石榴红玛瑙值钱吗? 简述监护人的职责 简述监护人的职责与监护关系终止的情形有哪些 简述民法中的监护制度及监护人职责履行内容 简述法定监护人的范围 简述民法中的监护制度及监护人职责履行内容?急急急,拜托各位帮帮忙_百 ... 我国民法通则关于监护人的规定有哪些 一部带CF背包穿越的小说叫啥名 架空小说,女主背一个背包穿越,有手机、药品。后被认做仙女,男主角是王... 脸部有炎症可以汗蒸吗 去体内湿毒,汗蒸有用吗 我朋友做了个手机纳米防护,看起来不错,我想知道有什么危害吗?_百度... 幼儿园大班毕业册老师寄语 幼儿园毕业手册老师寄语 word拉宽表格算不算变动格式