calcopticalflowpyrlk函数
时间: 2023-04-23 19:04:07 浏览: 58
calcopticalflowpyrlk函数是OpenCV中的一个函数,用于计算图像中的光流。它使用金字塔LK算法来计算两幅图像之间的稠密光流。该函数可以用于跟踪图像中的运动物体,或者用于计算图像中的运动场。
相关问题
opencv中calcOpticalFlowPyrLK函数的源代码展示,及所在文件
calcOpticalFlowPyrLK函数的源代码在OpenCV的/optflow/src/pyrlk.cpp文件中,以下是该函数的源代码展示:
```C++
int cv::calcOpticalFlowPyrLK(InputArray _prevImg, InputArray _nextImg,
InputArray _prevPts, InputOutputArray _nextPts,
OutputArray _status, OutputArray _err,
Size winSize, int maxLevel,
TermCriteria criteria, int flags, double minEigThreshold)
{
int i, k, k1, npoints;
const Mat prevImg = _prevImg.getMat(), nextImg = _nextImg.getMat();
const Mat prevPts = _prevPts.getMat(), nextPts = _nextPts.getMat();
Mat status = _status.getMat(), err = _err.getMat();
CV_Assert(prevImg.size() == nextImg.size() && prevImg.type() == nextImg.type());
CV_Assert(prevPts.depth() == CV_32F && (prevPts.channels() == 1 || prevPts.channels() == 2));
CV_Assert(prevPts.size() == nextPts.size() && prevPts.type() == nextPts.type());
CV_Assert(winSize.width > 2 && winSize.height > 2);
if( !status.empty() )
CV_Assert(status.size() == prevPts.size() && CV_IS_MASK_ARR(status));
if( !err.empty() )
CV_Assert(err.size() == prevPts.size() && err.type() == prevPts.type());
if( minEigThreshold < 0 )
minEigThreshold = 1e-4;
//...
}
```
其中,函数参数的含义如下:
- _prevImg:前一帧图像;
- _nextImg:后一帧图像;
- _prevPts:前一帧中需要跟踪的点(输入参数);
- _nextPts:后一帧中对应的点(输出参数);
- _status:每个点是否成功跟踪的标志(输出参数);
- _err:每个点的跟踪误差(输出参数);
- winSize:每个金字塔层的窗口大小;
- maxLevel:最大金字塔层数;
- criteria:停止迭代的条件;
- flags:算法的标志;
- minEigThreshold:最小特征值阈值。
opencv中calcOpticalFlowPyrLK函数参数返回值各自有什么含义
calcOpticalFlowPyrLK函数是用于计算光流的函数,它可以通过输入的图像序列,对其中的特征点进行追踪,返回特征点在下一帧图像中的位置坐标和是否成功的标志位。其中返回值中的标志位可以用来判断追踪是否成功,如果成功,则将目标移动的方向和距离计算出来,如果失败则将特征点的位置设为-1,表示无法追踪到该点。