opencv中calcOpticalFlowPyrLK函数参数返回值各自有什么含义
时间: 2024-01-17 17:03:06 浏览: 29
calcOpticalFlowPyrLK函数是用于计算光流的函数,它可以通过输入的图像序列,对其中的特征点进行追踪,返回特征点在下一帧图像中的位置坐标和是否成功的标志位。其中返回值中的标志位可以用来判断追踪是否成功,如果成功,则将目标移动的方向和距离计算出来,如果失败则将特征点的位置设为-1,表示无法追踪到该点。
相关问题
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中imshow函数各个参数代表什么意思
imshow函数中的第一个参数是窗口名称,用于显示图像的窗口的名称。第二个参数是要显示的图像,可以是Mat类型或其他图像类型。第三个参数是可选的,它指定了窗口的属性,例如窗口是否可以调整大小等。如果不指定,则默认为WINDOW_AUTOSIZE,即窗口大小自适应图像大小。