OpenCV实战(29)——视频对象追踪
0. 前言
我们已经学习了如何跟踪图像序列中点和像素的运动。但在多数应用中,通常要求追踪视频中的特定移动对象。首先确定感兴趣的对象,然后必须在视频序列中对其进行追踪。由于随着它在场景中的演变,视点和光照变化、非刚性运动、遮挡等,对象在视觉上会发生诸多变化,这为追踪视频中的对象带来了挑战。
本节中,我们将介绍一些在 OpenCV
库中实现的对象跟踪算法。我们将实现一个通用框架,以方便的对算法进行替换。我们可以将此实现与基于积分图像计算的直方图进行对象追踪的方法进行对比。
1. 追踪视频中的对象
对象追踪问题通常假设没有关于要追踪的对象的先验知识可用。因此,追踪是通过识别帧中的对象来启动的,并且追踪必须从对象识别开始。对象的初始识别是通过指定一个边界框来实现的,追踪器模块的目标是在后续帧中重新识别该对象。
因此,定义对象追踪框架的 OpenCV
的 cv::Tracker
类有两个主要方法。第一个是用于定义初始目标边界框的 init
方法;第二个是 update
方法,它在给定新帧的情况下输出新的边界框。这两种方法都接受帧(即 cv::Mat
实例)和边界框(即 cv::Rect2D
实例)作为参数;在第一种方法中,边界框是输入参数,而对于第二种方法,边界框则