[学习笔记-opencv篇]基础函数calcOpticalFlowPyrLK

calcOpticalFlowPyrLK
金字塔Lucas-Kanade光流算法接口,实现金字塔中L-K光流计算的稀疏迭代版本。根据给出的前一帧特征点坐标计算当前视频帧上的特征点坐标。

void cvCalcOpticalFlowPyrLK( InputArray prevImg, InputArray nextImg, InputArray prevPts, InputOutputArray nextPts, OutputArray status, OutputArray err, Size winSize, int maxLevel, TermCriteria criteria, int flags, double minEigThreshold );
  • prevImg 第一个8位输入图像或由buildOpticalFlowPyramid()构造的金字塔;
  • nextImg 下一时刻和prev相同类型的图像或金字塔;
  • prevPts 光流法要找到的二维点vector,点坐标必须是单精度浮点数;
  • nextPts 包含输入特征在第二帧中计算出来的新位置的二维点vector,有单精度浮点坐标;当传递OPTFLOW_USE_INITIAL_FLOW标志时,向量必须与输入中的大小相同;
  • status 输出状态向量(无符号字符)。如果对应特征的光流被发现,数组中的每一个元素都被设置为 1, 否则设置为 0;
  • win_size 每个金字塔层的搜索窗口尺寸;
  • maxLevel 最大的金字塔层数。如果为 0,不使用金字塔(即金字塔为单层);如果为 1 ,使用两层;下面依次类推;
  • criteria 指定在每个金字塔层,为某点寻找光流的迭代过程的终止条件;
  • flags 操作标志。可选参数如下:
    1)OPTFLOW_USE_INITIAL_FLOW,使用初始估计,存储在nextPts中;如果未设置标志,则将prevPts复制到nextPts并将其视为初始估计;
    2)OPTFLOW_LK_GET_MIN_EIGENVALS,使用最小特征值作为误差测量(参见minEigThreshold描述);如果没有设置标志,则将原稿周围的色块和移动点之间的L1距离除以窗口中的像素数,用作误差测量;
  • minEigThreshold 算法计算光流方程的2x2正常矩阵的最小特征值,除以窗口中的像素数;若该值小于minEigThreshold,则过滤掉相应的功能并且不处理其流程。

eg.

void cv::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 )

参考
Opencv学习(4)——CalcOpticalFlowPyrLK()函数解析
OpenCV:金字塔Lucas-Kanade光流算法之函数接口cvCalcOpticalFlowPyrLK的使用
OpenCV3:金字塔Lucas-Kanade光流算法之函数接口calcOpticalFlowPyrLK的使用

你可能感兴趣的:(OpenCV篇)