Saturday 22 July 2017

Opencv Flood Fill Binary Options


Esta pergunta já tem uma resposta aqui: Eu tenho um mapa de borda extraído do módulo de detecção de borda em OpenCV (canny edge detection). O que eu quero fazer é preencher os buracos no mapa de borda. Estou usando C. E OpenCV bibliotecas. Em OpenCV há uma função cvFloodFill (), e ele irá preencher os buracos com uma semente (com um do local para começar a inundação). No entanto, estou tentando preencher todos os buracos interiores sem conhecer as sementes. (Semelhante a imfill () em MATLAB) Q1: como encontrar todas as sementes, para que eu pudesse aplicar cvFloodFill () Q2: como implementar um imfill ) Equivalente Newbie no OpenCV, e qualquer dica é apreciada. Pediu Nov 11 09 em 16:19 Amro 103k 9679 18 9679 163 9679 302 marcado como duplicado por Shl matlab Usuários com o crachá matlab pode sozinho fechar perguntas matlab como duplicatas e reabri-los conforme necessário. Jun 5 14 at 8:52 Esta pergunta foi feita antes e já tem uma resposta. Se essas respostas não abordarem completamente a sua pergunta, faça uma nova pergunta. 9 Respostas De acordo com a documentação do imfill no MATLAB: Portanto, para obter os buracos pixels, faça uma chamada para cvFloodFill com o pixel do canto esquerdo da imagem como uma semente. Você obtém os buracos complementando a imagem obtida na etapa anterior. MATLAB Exemplo: respondeu Nov 11 09 em 18:02 Amro 103k 9679 18 9679 163 9679 302 isso é incrível, Amro Obrigado. Ndash Lily Nov 11 09 em 20:17 Muito agradável. Eu estava tentando descobrir como fazer isso sem contar com a bandeira buracos em imfill. Eu gostaria de fazer isso no OpenCV Python e você me mostrou o caminho. Obrigado Amro ndash rayryeng Sep 3 14 at 16:49 a função cvDrawContours tem uma opção para preencher os contornos que você desenhou. Aqui está um pequeno exemplo cvDrawContours (IplImage, contornos, cor, cor, -1, CVFILLED, 8) Aqui está a documentação que eu acho que você postou isso há muito tempo, mas espero que ajude alguém. Este é o código-fonte (em C): Eu estive olhando ao redor da internet para encontrar uma função de imfill adequada (como a do Matlab), mas trabalhando em C com OpenCV. Depois de alguns reaserches, eu finalmente veio com uma solução. O truque está na configuração dos parâmetros da função cvDrawContours: cvDrawContours (dst, contorno, branco, branco, 0, CVFILLED) dst indicador de contorno de imagem de destino para o primeiro contorno cor branca usada para preencher o contorno 0 Nível máximo para contornos desenhados. Se 0, somente o contorno é desenhado CVFILLED Espessura das linhas com as quais os contornos são desenhados. Se for negativo (Por exemplo, CVFILLED), os interiores do contorno são desenhados. Mais informações na documentação openCV. Provavelmente há uma maneira de obter dst diretamente como uma imagem binária, mas eu não poderia encontrar como usar a função cvDrawContours com valores binários. Responde Apr 15 13 at 12:54 Heres uma aproximação rápida e suja: Execute canny em sua imagem de entrada para que a nova imagem binária tem 1s nas bordas, e 0s de outra forma Encontrar o primeiro 0 ao longo de um lado de sua imagem de borda e iniciar Um floodfill com 1s nesse ponto em uma imagem em branco usando sua imagem de borda como a máscara. (Estavam esperando aqui que nós não tivemos azar e semear este primeiro preenchimento no interior de uma forma que é meio-fora da tela) Esta nova imagem floodfilled é o fundo. Qualquer pixel aqui que tenha um 1 é o fundo, e qualquer pixel que tem um 0 é o primeiro plano. Percorra a imagem e encontre os pixels de primeiro plano. Semeie um floodfill em qualquer que você encontrar. OU esta nova imagem floodfilled com sua imagem Canny da etapa 1, e você está feito. Respondeu Jan 26 10 em 18:41

No comments:

Post a Comment