Seqüências e OpenCVOpenCV usa o tipo de CvSeq para construir sequências de objetos em um CvSeq há 4 ponteiros:... h_next , h_prev, v_next e v_prev, que apontam para outras sequências. h_next e ponto h_prev a sequências no mesmo nível e v_next e v_prev pontos para seqüências em outros níveis.
No nosso caso, isso é ótimo: no primeiro nível estão os contornos exteriores dos componentes ligados e no segundo nível estão os contornos dos buracos de cada componente
Desenho dos componentes ligados Vamos concluir o exemplo. pintar os componentes de conexão em uma nova imagem. Nós usamos a função cvDrawContours. Adicione o seguinte após o último código. O código atualizado é aqui.
para (ptr = contornos; ptr = NULL;! ptr = ptr-> h_next) {color = CvScalar CV_RGB (rand () e 255, rand () e 255, rand () e 255); cvDrawContours (cc_color, ptr, cor, CV_RGB (0,0,0), -1, CV_FILLED, 8, cvPoint (0,0)); } E isso! Agora compilar o programa e executá-lo com esta imagem. Você deve obter a primeira imagem como o resultado :) Mais tarefas com componentes conectados Existem outras tarefas comuns que estão relacionados com componentes conectados. Vou listar três deles aqui: Obter a caixa delimitadora de um componente Nós usamos o cvBoundingRect função. Ele recebe um CvSeq ou CvContour e outro parâmetro que pergunta se a caixa deve ser recalculado (1) ou se você pode tomar o valor de CvContour (0). Devolve uma CvRect, que contém 4 atributos: X, Y, largura e altura. Aproximado um componente por um polígono Podemos usar cvApproxPoly, que se aproxima de um contorno por um polígono. Isso é feito ao usar CV_CHAIN_APPROX_SIMPLE, mas eu não sei se o mesmo método é usado. Testa se um ponto está dentro de um componente conectado Podemos usar cvPointPolygonTest para testar se um ponto está dentro de algum polígono. Desde que pode aproximar um contorno por um polígono podemos usar essa função para verificar se um ponto pertence a um componente ligado. Não devemos esquecer de verificar se o ponto está fora dos buracos no componente. Conclusão Esta é apenas uma introdução de como trabalhar com os componentes conectados. Existem vários algoritmos e técnicas que usam componentes conectados e isso pode lhe dar alguma ajuda para compreender e implementá-las. Um exemplo é descrito nestPrograma em várias aplicações com Titanium