下面的代码片段用于跟踪,但问题是我不知道为什么由于某些原因点(对象的质心点)平行消失几帧,calcOpticalFlowPyrLK也不适用于那些帧,一切都消失了几帧。图像如下所示。任何人都可以帮助您持续跟踪这些对象。我也试过用kalman过滤器但是没能成功。
视频的第10帧
视频的第25帧
看看这个图像点只会在显示输入图像时消失
视频的第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());*/
}
}
答案 0 :(得分:0)
如果您在循环中执行此操作(例如,对于每个帧),则必须在检测到并正确跟踪对象后重新生成对象上的点。例如,如果您使用边界框来描述您的车辆,那么一旦您在两个连续帧之间匹配车辆,您必须通过使用良好功能或统一在新的上生成一组新的点检测到车辆。