簡體   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