21.目标追踪

目录

1  项目介绍

2  代码实现

2.1  导入库

2.2  配置参数

2.3  定义追踪算法

2.4  实例化一个(组)追踪器

2.5  读取视频

2.6  进入循环

2.6.1  取当前帧

2.6.2  调整每一帧的尺寸

2.6.3  获取追踪结果

2.6.4  绘制追踪结果

2.6.5  显示图像

2.6.6  选择追踪区域

2.6.7  退出


1  项目介绍

我们当前有一个视频,我们在播放视频中在其中一帧对被检测物体画框

画完之后,这个框一直跟着这个物体走

会有两个问题

  • 我们追踪的物体在视频中一直不能被遮挡,如果被遮挡就追踪不到了
  • 我们的矩形框大小不会改变

这两个问题是仅使用kcf算法无法解决的

2  代码实现

2.1  导入库

2.2  配置参数

video是我们要检测的视频,tracker是我们的追踪算法

2.3  定义追踪算法

opencv中内置了如下追踪算法,我们下面将要用到kcf这个算法

除了上面这些还有别的,比如GOTURN,随着opencv版本不断的更新,算法应该也会增加或更改,我们ctrl+左键点进来搜Tracker就知道当前版本opencv有哪些追踪算法

2.4  实例化一个(组)追踪器

2.5  读取视频

2.6  进入循环

2.6.1  取当前帧

如果都读取完了就跳出循环

2.6.2  调整每一帧的尺寸

宽定位600,然后高使用 原视频高宽比*宽,interpolation是插值,这个在 10.银行卡号中有提到过 在网页中搜索插值就可以找到

2.6.3  获取追踪结果

我们现在追踪器还没加算法,所以没结果,我们创建之后才能有结果,由于我们的key定义在展示的后面,所以我们创建也要在后面写

返回值有两个success是布尔量,当这个程序报错时会返回False,其余状态均返回True,我们print出其中一帧的结果看一下

success是True,boxes是空的,因为我们还画出来要追踪的东西

2.6.4  绘制追踪结果

我们当前boxes是空的,直接就进入循环了,我们说一下进入循环是什么样的,boxes会产生多组结果(如果我们追踪多个目标就会产生多个结果),然后我们遍历多个结果,将结果画上框子

2.6.5  显示图像

2.6.6  选择追踪区域

当我们想选择追踪区域时,按下空格键,之后使用cv2.selectROI,我们看一下参数

  • "Frame" 窗口名称,执行这个方法时会新创建一个窗口,我们为了不出现两个窗口,就将窗口的名称设置为与刚刚窗口相同的名称
  • frame 要画的图像
  • fromCenter=False 如果为真,则选择的中心将匹配鼠标的初始位置。在相反的情况下,选择矩形的一角将对应于鼠标的初始位置。通俗来讲就是画角点矩形还是画中心矩形
  • showCrosshair=True 如果为真,将显示选择矩形的十字线。

选择完ROI后创建一个追踪器tracker,这时候使用到了上面的kcf算法,之后将追踪器,当前帧,ROI 加入到trackers中

  • ROI(region of interest) 感兴趣的区域

此时我们trakcers中有追踪器了,那么我们就有boxes了,有boxes就能绘制出追踪结果矩形了

我们添加追踪器是时候由于进入到了判定分支,所以此时的视频也是暂停的,我们按下空格进行绘制后,再次按任意键(相当于关闭我们ROI的窗口)之后视频正常播放,绘制ROI的时候一次只能画一个,如果想画多个等视频播放后再按一下空格就可以画另外一个了

2.6.7  退出

如果按ESC退出循环,释放视频流,关闭所有窗口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suyuoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值