Как получить сегментированные регионы из водораздела (OpenCV - C ++) для дальнейшей классификации - PullRequest
0 голосов
/ 22 марта 2019

Я хочу получить все сегментированные регионы. Я хочу проверить, является ли определенный сегмент круглым (ячейка) или нет.

Могу ли я использовать findcontour в такой проблеме?

Segmented Image

*** Edit

Я успешно получил сегментированные области, используя контуры. Любое предложение о том, как классифицировать эти контуры в зависимости от их формы. (Удалить некруглые контуры).

Ситуация выглядит так:

Segmented Regions

1 Ответ

0 голосов
/ 22 марта 2019

Да, это должно работать для вас.Если «wshed» будет вашим входным изображением для функции findContours().Если вы считаете, что возможно наличие вложенных областей, вы должны использовать CV_RETR_TREE, если вы хотите обрабатывать их особым образом, CV_RETR_LIST, если вы хотите обрабатывать области в регионе, либо CV_RETR_EXTERNAL, еслиВы хотите игнорировать все вложенные регионы.См. Документ и Пример для использования.

РЕДАКТИРОВАТЬ 1.0:

Чтобы ответить на ваши изменения: круговые контуры будут иметь один внешний и один внутренний контур,Поэтому, если вы используете CV_RETR_TREE и проверяете для каждого контура, есть ли внутри другой контур, это круговой контур, и вы можете сохранить его и удалить все остальные контуры.См. здесь в разделе 4. RETR_TREE или здесь для использования

РЕДАКТИРОВАТЬ 2.0: Кажется, я вас неправильно понял.Под «круговым» в Edit 1.0 я имел в виду закрытые объекты.Теперь я не уверен, что вы имеете в виду с круговой.Если выпуклости достаточно, я бы привел вас к convecHull и convexityDefects.

Если вам действительно необходимо иметь форму круга / овала, то япопытался бы вычислить параметры овала или круга на основе контура и нарисовать идеальный круг / овал на основе этого и сравнить контур с ним.Но, может быть, есть лучшие способы для этого.В этом случае я бы порекомендовал вам задать его как новый вопрос, поскольку он не имеет ничего общего с темой этого вопроса.

...