opencv3/C++实现光流点追踪
光流金字塔
calcOpticalFlowPyrLK()函数参数说明:
voidcalcOpticalFlowPyrLK( InputArrayprevImg,//第一个8位输入图像或者通过buildOpticalFlowPyramid()建立的金字塔 InputArraynextImg,//第二个输入图像或者和prevImg相同尺寸和类型的金字塔 InputArrayprevPts,//二维点向量存储找到的光流;点坐标必须是单精度浮点数 InputOutputArraynextPts,//输出二维点向量(用单精度浮点坐标)包括第二幅图像中计算的输入特征的新点位置;当OPTFLOW_USE_INITIAL_FLOW标志通过,向量必须有和输入一样的尺寸。 OutputArraystatus,//输出状态向量(无符号char);如果相应的流特征被发现,向量的每个元素被设置为1,否则,被置为0. OutputArrayerr,//输出错误向量;向量的每个元素被设为相应特征的一个错误,误差测量的类型可以在flags参数中设置;如果流不被发现然后错误未被定义(使用status(状态)参数找到此情形)。 SizewinSize=Size(21,21),//在每个金字塔水平搜寻窗口的尺寸。 intmaxLevel=3,//最大金字塔层数;如果设置为0,则不使用金字塔(单层),如果设置为1,则使用两个层次,依此类推;如果将金字塔传递给输入,则算法将使用与金字塔一样多的级别,但不超过maxLevel。 TermCriteriacriteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS,30,0.01),//指定迭代搜索算法的终止标准(指定的最大迭代次数criteria.maxCount或搜索窗口移动小于criteria.epsilon) intflags=0,//操作标志 doubleminEigThreshold=1e-4//计算光流方程的2×2标准矩阵的最小特征值除以窗口中的像素数量;如果这个值小于minEigThreshold,那么一个相应的特征被过滤出来,且它的光流不被处理,所以它允许去除坏点提升性能。 );
#includeusingnamespacecv; //光流跟踪 Matframe,gray,pr_frame,pr_gray; std::vector inPoints; std::vector fpts[2]; voidtrackFeature(); intmain() { VideoCapturecapture; capture.open(0); if(!capture.isOpened()) { printf("cannotopenthecamear......\n"); return-1; } namedWindow("input",CV_WINDOW_AUTOSIZE); namedWindow("output",CV_WINDOW_AUTOSIZE); while(capture.read(frame)) { cvtColor(frame,gray,COLOR_BGR2GRAY); if(fpts[0].size()<40) { imshow("input",frame); std::vector features; //角点检测 goodFeaturesToTrack(gray,features,300,0.01,10); fpts[0].insert(fpts[0].end(),features.begin(),features.end()); inPoints.insert(inPoints.end(),features.begin(),features.end()); } else printf("objecttracking......\n"); if(pr_gray.empty()) gray.copyTo(pr_gray); trackFeature(); for(inti=0;i status; std::vector errors; //计算稀疏特征集的光流 calcOpticalFlowPyrLK(pr_gray,gray,fpts[0],fpts[1],status,errors); intk=0; for(inti=0;i 2&&status[i]) { inPoints[k]=inPoints[i]; fpts[1][k++]=fpts[1][i]; } } inPoints.resize(k); fpts[1].resize(k); //绘制光流轨迹 RNGrng(0); for(inti=0;i
以上这篇opencv3/C++实现光流点追踪就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。