Я хотел воспроизвести пример о найденных подключенных компонентах. Вот (код больше не в сети, и я хотел использовать 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
?
Задача ещё не решена.
Других решений пока нет …