在之前的几篇关于OpenCV的文章中我集中介绍了OpenCV中比较常用的操作和函数.在我们基础的学习中,这些函数其实在图像进行预操作的过程中已经够用了.因此在之后的文章中,我们要继续深入使用OpenCV中的一些函数来去实现几个简单的实例.能够在学习的过程中获得满足感.
第一个实例就是从物体跟踪开始.物体跟踪分为很多种类型,且每个类型中也都包含了不同的算法,因此我们今天先从光流法开始,这也是最基础的算法来开始学习.
一:什么是光流法
在OpenCV-PythonTutorials上的解释:光流是物体或者摄像头的运动导致的两个连续帧之间的图像对象的视觉运动的模式。它是一个向量场,每个向量是一个位移矢量,显示了从第一帧到第二帧的点的移动。
上图表示了一个球在5个连续帧里的移动。箭头显示了它的位移矢量。
光流在日常生活中应用还是很广泛的,特别是在视频的监控领域,比如从移动构建再到视频拍摄,再到视频压缩存取,都有很广泛的应用.
二:光流法的原理
在推广光流法的时候,我们要有两个前提假设:
第一:所追踪的像素目标在连续的帧之间要保持基本不变.
第二:所追踪的像素目标在连续的帧之间要有相似的运动趋势.
现在我们开始推广一下光流方程:
①:假设从首发帧的像素I(x,y,t),在dt时间之后的下一帧中移动距离为(dx,dy),且这些像素是相同的,而且亮度不变
因此得到以下推广:
②:对上边公式的右边做泰勒级数近似。除以dt得到下面的等式:
其中每个参数如下:
上面的等式被叫做光流等式,但是我们在这里会发现几个问题