<р> Последовательности и OpenCVOpenCV использует тип CvSeq построить последовательности объектов В CvSeq есть 4 указатели:... h_next , h_prev, v_next электронной v_prev, что точка с другими последовательностями. h_next и h_prev точка в последовательности на том же уровне и v_next и v_prev точек последовательностей, на других уровнях.
В нашем случае это здорово: на первом уровне находятся внешние контуры, связанных компонентов и на второго уровня контуры отверстий каждого компонента
<р> Рисование связные компоненты мы завершим пример. покраска подключения компонентов на новое изображение. Мы используем функцию cvDrawContours. Добавить следующее после последнего кода. Обновленный код здесь.
для (PTR = контуров; PTR = NULL;! PTR = ptr-> h_next) {CvScalar цвет = CV_RGB (RAND () & 255, RAND () и 255 рандов (,) & 255); cvDrawContours (cc_color, PTR, цвет, CV_RGB (0,0,0), -1, CV_FILLED, 8, cvPoint (0,0)); } И что это! Теперь скомпилировать программу и запустить ее с этого образа. Вы должны получить первое изображение как результат :) Больше задач с подключенных компонентов Есть другие общие задачи, связанные с подключенных компонентов. Я перечислю три из них: Получить ограничительную рамку компонента Мы используем функцию cvBoundingRect. Он получает CvSeq или CvContour и другой параметр, который просит, если коробка должна быть пересчитана (1), или если вы можете взять значение из CvContour (0). Она возвращает CvRect, который содержит 4 атрибуты: X, Y, ширина электронной высоту. Приблизительная компонент полигоном Мы можем использовать cvApproxPoly, что приближается контур многоугольником. Это делается при использовании CV_CHAIN_APPROX_SIMPLE, но я не знаю, если используется тот же метод. Test, если точка находится внутри связной компоненты Мы можем использовать cvPointPolygonTest проверить, если точка находится внутри какой-то полигон. Так как мы можем приблизить контур многоугольником мы можем использовать эту функцию, чтобы проверить, если точка принадлежит связной компоненте. Мы не должны забывать, чтобы проверить, если точка находится вне отверстия в компоненте. <Р> Вывод <р> Это только введение о том, как работать с подключенными компонентами. Есть различные алгоритмы и методы, которые используют связные компоненты, и это может дать вам некоторую помощь, чтобы понять и реализовать их. Один пример описан в этой статье. Программа на нескольких приложений с Titanium