简介
void cv::calcOpticalFlowPyrLK (
InputArray prevImg,以该图片为基准流追踪
InputArray nextImg,用来获得追踪结果的图片
InputArray prevPts,以该数组点为基准就行流追踪,单位单精度浮点数
InputOutputArray nextPts, 获得追踪点的结果
OutputArray status, 输出状态标记,如果追踪到了结果,则对应同角标的状态向量位置元素为1,否则为0
OutputArray err,输出错误标记; 向量的每个元素都设置为相应特征的错误,错误度量的类型可以在flags参数中设置; 如果未找到流,则对错误不进行定义(使用status参数查找此类情况)
Size winSize = Size(21, 21),每个金字塔的搜索窗口的winSize大小
int maxLevel = 3,金字塔层数,图像层级总数为该值+1
TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01), 指定迭代搜索算法的终止条件的参数
int flags = 0, 判定追踪结果错误的度量
若为OPTFLOW_USE_INITIAL_FLOW,则使用初始估计,存储在nextPts中;如果未设置标 志,则将prevPts复制到nextPts并将其视为初始估计。
若为 OPTFLOW_LK_GET_MIN_EIGENVALS,则使用最小特征值作为误差测量(参见minEigThreshold描述)
如果没有设置标志,则将原稿周围的色块和移动点之间的L1距离除以窗口中的像素数,用作误差测量。
double minEigThreshold = 1e-4
)
参考https://blog.csdn.net/weixin_42905141/article/details/93745116
例如
如cv::calcOpticalFlowPyrLK(cur_img, forw_img, cur_pts, forw_pts, status, err, cv::Size(21, 21), 3)调用方法
img类型定义为
cv::Mat img
pts类型定义为
vector<cv::Point2f> pts
其中status与err由如下定义
vector<uchar> status;
vector<float> err;
cur_img与forw_img对应了要追踪光流的两张照片,使用cur_pts作为前一时刻已经提取出的点(即在cur_img上已经提取出的点,利用各类角点提取方法),随后送入status与err作为追踪结果的状态记录,用之加以判断追踪的结果。最后两个参数是一般默认值。
注意,图片大小要相同
共勉