OpenCV实战(27)——追踪视频中的特征点
0. 前言
我们已经知道可以通过一些最独特的点来分析图像,对于图像序列同样如此,其中一些特征点的运动可用于了解捕获场景的不同元素如何移动。在本节中,我们将学习如何在特征点逐帧移动时通过跟踪特征点来执行序列的时间分析。
1. 追踪视频中的特征点
(1) 要开始追踪运动过程,首先要做的是检测初始帧中的特征点。然后尝试在之后的帧中跟踪这些点。
(2) 由于我们正在处理一个视频序列,因此找到特征点的对象很可能已经移动(这种移动也可能是由于相机移动造成的)。因此,必须围绕一个点的先前位置进行搜索,以便在下一帧中找到它的新位置,可以通过 cv::calcOpticalFlowPyrLK
函数完成此过程。也就是说,输入两个连续帧和一个特征点向量,函数可以返回特征点在新图像中的位置。要跟踪完整序列中的点,需要逐帧重复此过程。需要注意的是,当在整个序列中追踪点时,不可避免地会失去对其中一些点的跟踪,因此跟踪的特征点的数量将逐渐减少。因此,通常需要持续检测新的特征点。
(3) 我们继续利用在视频序列处理一节中定义的视频处理框架,我们将定义一个实现 FrameProcessor
接口的类。此类的数据属性包括执行特征点检测及其跟踪所需的变量:
class