CamShift仅在某个时候跟踪对象,即使BackProjection非常好

时间:2014-08-06 20:10:19

标签: c++ opencv back-projection

编辑:它似乎是物体从物体进入的框架的一侧。不知道为什么会这样,但是从右边进入它总是被从顶部拾起,它从来没有,直到它接近右侧。

简而言之,我尝试使用OpenCV和CamShift跟踪对象。我已经计算并显示了我的反投影图像,看起来很棒。它基本上是黑色背景上的白色斑点。但是,我的程序有时只会选择它。 CamShift的搜索窗口包含整个图像,然后在屏幕上显示时缩小到对象,然后在对象离开时再次展开。这工作正常约2/3次。第三次我不明白出了什么问题。

http://imgur.com/a/rVw2l:显示我的意思的屏幕截图相册。绿色矩形是搜索窗口(trackWindow),红色是CamShift(trackBox)的rotateRect输出。

有什么想法吗?我尝试过按照标准玩,但这似乎没什么用。

calcBackProject(&image_hue, 1, 0, hist, backproj, &ranges, 1, true );
erode(backproj, backproj, Mat());
dilate(backproj, backproj, Mat());

backproj=backproj*10;
imshow ("", backproj);

cout << "width " << trackWindow.width << "\n";
cout << "height " << trackWindow.height << "\n";    

RotatedRect trackBox = CamShift(backproj, trackWindow, TermCriteria( CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1 ));

rectangle(image,trackWindow, Scalar(0,255,0),1,8,0);

Point2f vertices[4];
trackBox.points(vertices);
for (int i = 0; i < 4; i++)
{
line(image, vertices[i], vertices[(i+1)%4], Scalar(0,0,255));
}

0 个答案:

没有答案