繁体   English   中英

使用calcOpticalFlowPyrLK跟踪多个对象

[英]tracking multiple objects using calcOpticalFlowPyrLK

下面的代码段用于跟踪,但问题是我不知道为什么由于某些原因,点(对象的质心点)消失了几帧,而calcOpticalFlowPyrLK也不适用于那些帧,而消失了几帧。 图像如下图所示。 任何人都可以帮助持续跟踪这些对象。 我也尝试过使用卡尔曼滤波器,但是无法成功。

视频的第10帧

视频的第10帧

视频的第25帧

看这个图像点消失了,只是显示输入图像

视频的第25帧

视频的第45帧

视频的第45帧

    for(int i =0; i<theVehicles.size(); i++){
    Point p=Point(theVehicles.at(i).getXPos(),theVehicles.at(i).getYPos());
    points12.push_back(p);
    TermCriteria termcrit(TermCriteria::COUNT|TermCriteria::EPS,20,0.03);
    Size subPixWinSize(10,10), winSize(31,31);

    //cout<<p;

   calcOpticalFlowPyrLK(prevGray, filledEdgesOut,  points12,points, status, err, winSize, 3, termcrit, 0, 0.001);

   RNG rng(12345);

            for( int i = 0; i < points.size(); i++ )
     { 
         circle( frame, points[i], r, Scalar(rng.uniform(0,255), rng.uniform(0,255),rng.uniform(0,255)), -1, 8, 0 ); 

         /*cv::circle(frame,points[i],10,cv::Scalar(0,0,255));
         cv::putText(frame,intToString(theVehicles.at(i).getXPos())+ " , " + intToString(theVehicles.at(i).getYPos()),cv::Point(theVehicles.at(i).getXPos(),theVehicles.at(i).getYPos()+20),1,1,Scalar(0,255,0));
    cv::putText(frame,theVehicles.at(i).getType(),cv::Point(theVehicles.at(i).getXPos(),theVehicles.at(i).getYPos()-30),1,2,theVehicles.at(i).getColour());*/
            }

    }

如果要循环执行此操作(例如,对于每个帧),则必须在检测到并正确跟踪对象后重新生成对象上的点。 例如,如果您使用边界框来描述您的车辆,则一旦您在两个连续的帧之间匹配车辆,就必须通过使用良好功能或统一在新检测到的车辆上生成一组新的点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM