CamShift только иногда отслеживает объект, хотя BackProjection очень хорош

редактировать: кажется, что сторона кадра, в которую входит объект, имеет значение. Не уверен, почему это так, но входя справа, он всегда поднимается, сверху никогда не поднимается, пока не приблизится к правой стороне.

Короче говоря, я пытаюсь отследить объект, используя OpenCV и CamShift. Я рассчитал и отобразил мое изображение обратной проекции, и оно выглядит фантастически. Это в основном белый шарик на черном фоне. Тем не менее, моя программа только подхватывает это иногда. Окно поиска CamShift охватывает все изображение, затем сжимается до объекта, когда оно появляется на экране, а затем снова расширяется, когда объект уходит. Это прекрасно работает примерно в 2/3 раза. Я не понимаю, что не так в третий раз.

http://imgur.com/a/rVw2l : Альбом скриншотов, показывающих, что я имею в виду. Зеленый прямоугольник — это окно поиска (trackWindow), а красный — выход rotatedRect CamShift (trackBox).

Есть идеи? Я пытался играть по критериям, но, похоже, это мало что дало.

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));
}

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector