Em outro artigo, aprendemos como extrair componentes conectados usando OpenCV e como a algumas das operações comuns. Agora eu vou falar sobre outra tarefa útil e comum: a filtragem de componentes ligados ao extrair apenas aqueles que passam a determinados critérios. E para tornar as coisas mais genérico, os critérios serão definidos pelo chamador usando ponteiros de função. Revisitando OpenCVOpenCV é uma biblioteca de processamento legal visão computacional e de imagem que é amplamente utilizado e oferece muitas características boas.
Vamos usá-lo para extrair e filtrar os componentes conectados a partir de uma imagem. Revisitando a extração de componentes Connected Podemos extrair os componentes ligados de uma imagem utilizando a função cvFindContours como descrito aqui. Ele armazena os contornos dos componentes conectados em uma lista de seqüências. Cada seqüência contém os pontos de um polígono que se aproxima que contorno e podemos navegar nesta lista de seqüências usando os h_next, h_prev, v_next e v_prev ponteiros.
CvSeq: Sequências de tipo OpenCV O CvSeq é uma sequência em OpenCV e é usado para armazenar os contornos dos componentes ligados. Desde que irá filtrar os componentes ligados, por isso precisamos de uma maneira para excluir um contorno da lista. A função cvSeqRemove remove elementos de uma seqüência, mas não remove uma seqüência inteira de nossa lista de contorno. Para remover uma seqüência da lista temos de mexer com os h_next e h_prev ponteiros. Se queremos remover o primeiro elemento só precisamos fazer o ponto ponteiro contornos ao segundo elemento.
Para remover um elemento no meio da lista de nós "saltar" o a partir da sequência. O procedimento é simples e inteligente: se queremos remover o X elemento fazemos o ponteiro h_next do ponto elemento anterior ao que depois de X eo h_prev do próximo ponto elemento ao elemento antes de X . Assim como esta: É claro que precisamos de verificar se X tem alguém atrás dele, por isso, não correr em algumas falhas de segmentação remover o último elemento. Definir uma função critérios personalizados usando ponteiros de função Para fazer os critérios de filtragem genéricos vamos usar ponteiros de função. A idéia é apresentar um contorno de uma função de critérios que aceita ou rejeita um contorno. Se o contorno for rejeitad ptr-> h_prev-> h_next = ptr-> h_next; if (ptr-> h_next = NULL!) ptr-> h_next-> h_prev = ptr-> h_prev;
Opencv Tutorial