Кодирование пример: фильтрация и извлечение связные компоненты
<р> Теперь мы напишем эту функцию, которая будет делать работу , Я отправлю код функции в ниже, на полный рабочий код доступен в конце статьи.
Каталог CvSeq * контуры, * PTR; CvMemStorage * MEM = cvCreateMemStorage (0); cvFindContours (IMG, сувениры, и контуры, SizeOf (CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint (0,0)); PTR = контуры; в то время как (PTR! = NULL) {если (критерии (PTR) == 0) {если (PTR == контуры) {контуры = ptr-> h_next; PTR = контуры; ptr-> h_prev = NULL; } Еще {ptr-> h_prev-> h_next = ptr-> h_next; если (ptr-> h_next! = NULL) ptr-> h_next-> h_prev = ptr-> h_prev; PTR = ptr-> h_next; }} Еще {PTR = ptr-> h_next; }} вернуться контуры; } <р> Пример использования В этом примере я покажу простую функцию, которая фильтрует компоненты на основе их соотношения , получение подключен только компоненты, которые почти квадратный. Каталог <р> Мы вызываем функцию extract_and_filter_CC так: filtered_cc = extract_and_filter_CC (IMG, квадрат); Заключение В этой статье описывается другой Применение подключенных компонентов: для фильтрации части изображения, которые не вписываются в определенные критерии. Он также использует указатели на функции, чтобы сделать фильтрацию в общий, как это возможно. Этот метод очень мощный и может быть использован в сочетании с другими методами, чтобы удалить шум изображения или для извлечения особенных части изображения. Полный рабочий код с комментариями можно ознакомиться здесь. CvSeq * extract_and_filter_CC (IplImage * IMG, Int (* критериям ) (CvSeq *)) {
INT квадрат (CvSeq * контур) {CvRect окно = cvBoundingBox (контур); если (box-> ж /box-> HW /box-> ч> 0,4) возвращение 1; вернуться 0;}
OpenCV Учебник