2015-02-19 1 views
0
vector<vector<Point> > contours; 
    vector<Vec4i> hierarchy; 

    findContours(img, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0)); 

Теперь, как я могу получить местоположение эллипсов из этих контуров ??Как проверить контуры, являются ли они эллипсом или нет, используя функцию fitEllipse в OpenCv C++?

+0

fitEllipse не скажет вам, если контур был эллипсом или нет. – berak

+0

так как я могу найти эллипс, используя эти контуры ?? –

+0

fitEllipse подходит для лучшего эллипса для контура, но он найдет лучший эллипс для квадрата, треугольника утки или любого другого контура, который он получит. вы хотите оценить, является ли контур эллипсом или нет, или найдите лучший эллипс, который описывает контур. –

ответ

0

Самым простым решением является для каждого контура:

  • вычислить эллипс (с использованием функции fitEllipse)
  • дро заполнены контура и (на другой мат) нарисовать заполненный эллипс (от предыдущей точки)
  • вычесть (или - возможно, лучше - использовать функцию absdiff) на мат из другого
  • находят количество не черных пикселей (использование функции countNonZero)
  • , если Num ber ненулевых пикселей, разделенных контурной областью, невелик, чем этот контур является эллипсом, если это число велико - это не эллипс. Вы должны найти свои значения

Рисование контуров может быть немного сложным, потому что трудно сказать, где их нарисовать. Для меня лучший вариант - найти центр массы контура и контур рисования в таком положении, чтобы центр масс находился в той же точке, что и центр эллипса.

Надеюсь, что это поможет, и это ясно, если нет - сообщите мне, я попытаюсь объяснить это лучше.

+0

. Ваш ответ мне непонятен :( –

+0

В какой части? – cyriel

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