Codificação o exemplo: filtragem e extrair os componentes conectados
Agora vamos codificar a função que irá fazer o trabalho . Vou postar o código da função abaixo aqui, o código de trabalho completo está disponível no final do artigo.
CvSeq * contornos, * ptr; CvMemStorage * mem = cvCreateMemStorage (0); cvFindContours (img, mem, e contornos, sizeof (CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint (0,0)); PTR = contornos; while (ptr = NULL!) {if (critérios (PTR) == 0) {if (ptr == contornos) {contornos = ptr-> h_next; PTR = contornos; ptr-> h_prev = NULL; } Else {ptr-> h_prev-> h_next = ptr-> h_next; if (ptr-> h_next = NULL!) ptr-> h_next-> h_prev = ptr-> h_prev; ptr = ptr-> h_next; }} Else {ptr = ptr-> h_next; }} retornar contornos; } Um exemplo de uso Neste exemplo eu vou lhe mostrar uma função simples que filtra os componentes com base na sua relação , recebendo apenas os componentes que são quase quadrado conectado. Nós chamamos a função extract_and_filter_CC como este: filtered_cc = extract_and_filter_CC (img, quadrado); Conclusão Este artigo descreve outro aplicação de componentes conectados: para filtrar as partes da imagem que não se encaixam em um determinado critério. Ele também usa ponteiros de função para fazer a filtragem tão genérica quanto possível. Esta técnica é muito potente e pode ser usado em conjunto com outras técnicas para remover o ruído ou uma imagem para extrair as partes especiais do imagem. O código de trabalho completo com comentários está disponível aqui. CvSeq * extract_and_filter_CC (IplImage * img, int (* critérios ) (CvSeq *)) {
int quadrado (CvSeq * contorno) {CvRect caixa = cvBoundingBox (contorno); if (caixa-> w /caixa-> HW /caixa-> h> 0,4) return 1; retornar 0;}
Opencv Tutorial