Вывод компонентов, подключенных к OpenCV

Я хотел воспроизвести пример о найденных подключенных компонентах. Вот (код больше не в сети, и я хотел использовать API C ++).

Я использовал следующий вызов findCountours:

findContours(img, contours, hierarchy, CV_RETR_CCOMP,CV_CHAIN_APPROX_SIMPLE);

где img получается путем установки порога изображения, предложенного в статье:

входное изображение http://img8.imageshack.us/img8/7249/78825396.png

Ожидаемый результат:

выходное изображение http://img8.imageshack.us/img8/5142/resultw.png

Из описания CV_RETR_CCOMP Я ожидал получить 6 контуров верхнего уровня, которые соответствуют 6 цветам полученного изображения.

В документе сказано, что подключенные компоненты
на верхнем уровне и отверстия являются дочерними по отношению к подключенным компонентам (CC).

Однако из исследования hierarchyЯ вижу, что первые 3 контура (0, 1, 3) не имеют ни родителя, ни потомка. Они соответствуют отверстиям в буквах «а». Другие контуры находятся в иерархии (см. Дамп в конце). Контуры 3 — это СС «верхнего уровня», которые содержат все изображения. Другие контуры являются внешними контурами ожидаемой CC.

Contour 0: next: 1,  previous: -1,  child: -1,  parent: -1,  size: 4
Contour 1: next: 2,  previous: 0,  child: -1,  parent: -1,  size: 4
Contour 2: next: 3,  previous: 1,  child: -1,  parent: -1,  size: 4
Contour 3: next: -1,  previous: 2,  child: 4,  parent: -1,  size: 4
Contour 4: next: 5,  previous: -1,  child: -1,  parent: 3,  size: 121
Contour 5: next: 6,  previous: 4,  child: -1,  parent: 3,  size: 80
Contour 6: next: 7,  previous: 5,  child: -1,  parent: 3,  size: 18
Contour 7: next: 8,  previous: 6,  child: -1,  parent: 3,  size: 18
Contour 8: next: 9,  previous: 7,  child: -1,  parent: 3,  size: 18
Contour 9: next: -1,  previous: 8,  child: -1,  parent: 3,  size: 8

Я проверил код с OpenCV 2.2 и 2.3.1.
Я протестировал более простое изображение (круг с отверстием) и получил тот же результат (3 контура: 0 — это отверстие, 1 — это верхний уровень, 2 — внешний контур).

Может кто-нибудь объяснить, как это связано с документом CV_RETR_CCOMP?

1

Решение

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

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

Других решений пока нет …