光流金字塔calcOpticalFlowPyrLK
的C++定义如下:
C++: void calcOpticalFlowPyrLK(InputArray prevImg, InputArray nextImg, InputArray prevPts,
InputOutputArray nextPts, OutputArray status, OutputArray err,
Size winSize=Size(21,21), int maxLevel=3, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01),
int flags=0, double minEigThreshold=1e-4 )
各个参数代表的含义如下:
- prevImg
你的标定图像的灰度图
- nextImg
你想搜寻的图像的灰度图
- prevPts
输入的标定图像的特征点(可以是其他特征点检测方法找到的点)
- nextPts
输出场景的特征点
- status
输出状态向量(无符号char
),如果在当前图像中能够光流得到标定的特征点位置改变,则设置status
的对应位置为1,否则设置为0
- err
输出错误向量;向量的每个元素被设为相应特征的一个错误,误差测量的类型可以在flags参数中设置;如果流不被发现然后错误未被定义(使用status
(状态)参数找到此情形)。
- winSize
在每个金字塔水平搜寻窗口的尺寸
- maxLevel
金字塔的高度,初始为3层
当使用calcOpticalFlowPyrLK
作为光流金字塔的算法时候,我们只需要知道以下的几点:
calcOpticalFlowPyrLK必须和其他的角点识别算法进行搭配使用,比如我这里使用的goodFeaturesToTrack,将其他的角点识别算法中获得的角点作为光流算法的prevPts
status 的大小和当前需要识别的光流移动的特征点大小一样,所以我们可以判定当前的图像是否还能与标定图像进行光流的依据