2013-05-21 8 views
0

Я использую camshift для отслеживания теннисных мячей и рисования эллипса вокруг теннисного мяча после его обнаружения. Тем не менее, каждый так часто я получаю эту ошибкуOpenCV рисует эллипс из выходного сигнала алгоритма.

OpenCV Error: Assertion failed (box.size.width >= 0 && box.size.height >= 0 &&  thickness <= 255) in ellipse, file /home/eanders/src/OpenCV-2.4.2/modules/core/src/drawing.cpp, line 1678 terminate called after throwing an instance of 'cv::Exception' 
what(): /home/eanders/src/OpenCV-2.4.2/modules/core/src/drawing.cpp:1678: error: (-215) box.size.width >= 0 && box.size.height >= 0 && thickness <= 255 in function ellipse 

Я предполагаю, что метод camshift возвращает объект RotatedRect что-то не от правильных размеров для эллипса, чтобы быть нарисованы внутри. Любые идеи, как исправить это? Код выглядит следующим образом. Спасибо заранее, ребята.

Rect trackWindow = Rect(p1, box); 
///employ camshift algorithm 
RotatedRect trackBox = CamShift(backproj, trackWindow, TermCriteria(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1)); 
ellipse(image, trackBox, Scalar(255,255,255), 3, CV_AA); 
ellipse(backproj, trackBox, Scalar(255,255,255), 3, CV_AA); 

ответ

0

Мне кажется, что алгоритм не смог отслеживать объект. Было бы здорово узнать, почему, но сейчас я бы проверил размеры вращающегося прямоугольника. Это явно то, о чем жалуется утверждение.

+0

Yah, это возможно. Я решил, что проще всего сбросить эллипс и поместить небольшой круг в центральные координаты RotatedRect, так как меня больше всего интересует этот центр. Спасибо за ответ. – cirea22

+0

Есть ли у RotatedRect полезное положение? Я ** угадаю **, что алгоритм не может отслеживать объект и поэтому возвращает Rect по умолчанию (размеры 0x0 и, возможно, положение 0,0). Поэтому вы можете нарисовать эти точки в неправильном положении ... – elactic

+0

Да, функция RotatedRect, по-видимому, по большей части следит за объектом. Моя работа, похоже, работает достаточно хорошо. – cirea22

Смежные вопросы