Opencv flood fill binary options


Esta questão já tem uma resposta aqui: Tenho um mapa de borda extraído do módulo de detecção de borda no OpenCV (detecção de borda simples). O que eu quero fazer é preencher os buracos no mapa de borda. Estou usando C. E bibliotecas OpenCV. No OpenCV há uma função cvFloodFill (), e irá preencher os buracos com uma semente (com uma das localidades para iniciar a inundação). No entanto, estou tentando preencher todos os buracos internos sem conhecer as sementes. (Semelhante ao imfill () em MATLAB) Q1: como encontrar todas as sementes, para que eu possa aplicar cvFloodFill () Q2: como implementar uma imfill ( ) Newbie equivalente em OpenCV, e qualquer dica é apreciada. Perguntou 11 de novembro de 09 às 16:19 Amro 104k 9679 19 9679 170 9679 306 marcado como duplicado por Shai matlab Usuários com o emblema matlab podem, sozinhos, fechar as perguntas de matlab como duplicatas e reabri-las conforme necessário. 5 de junho 14 às 8:52 Esta pergunta foi feita antes e já tem uma resposta. Se essas respostas não respondem totalmente a sua pergunta, faça uma nova pergunta. De acordo com a documentação de imfill em MATLAB: Portanto, para obter os pixels de furos, faça uma chamada para cvFloodFill com o pixel de canto esquerdo da imagem como uma semente. Você obtém os buracos, complementando a imagem obtida no passo anterior. MATLAB Exemplo: respondido 11 de novembro 09 às 18:02 Amro 104k 9679 19 9679 170 9679 306 isso é fantástico, Amro Obrigado. Ndash Lily 11 nov 09 às 20:17 Muito bom. Eu estava tentando descobrir como fazer isso sem depender da bandeira dos buracos na imfill. Eu gostaria de fazer isso no OpenCV Python e você me mostrou o caminho. Graças Amro ndash rayryeng 3 de setembro às 16:49 a função cvDrawContours tem uma opção para preencher os contornos que você desenhou. Aqui está um exemplo curto cvDrawContours (IplImage, contornos, cor, cor, -1, CVFILLED, 8) Aqui está a documentação, acho que você postou isso há muito tempo, mas espero que ajude alguém. Este é o código-fonte (em C): Eu tenho procurado a internet para encontrar uma função de imobilização adequada (como a de Matlab), mas trabalhando em C com o OpenCV. Depois de alguns reaserches, finalmente encontrei uma solução. O truque está na configuração de parâmetros da função cvDrawContours: cvDrawContours (dst, contorno, branco, branco, 0, CVFILLED) dst ponteiro de contorno de imagem de destino para a primeira cor branca de contorno usada para preencher o contorno 0 Nível máximo para contornos desenhados. Se 0, apenas o contorno é desenhado. CVFILLED Espessura de linhas com os contornos 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 não consegui encontrar como usar a função cvDrawContours com valores binários. Respondeu 15 de abril de 13 às 12:54 Heres uma abordagem rápida e suja: Execute um pouco na sua imagem de entrada para que a nova imagem binária tenha 1s nas bordas e 0s de outra forma Encontre o primeiro 0 ao longo de um lado de sua imagem de borda e inicie Um enchimento de enchimento com 1s nesse ponto em uma imagem em branco usando sua imagem de borda como a máscara. (Esperando aqui que não tivemos azar e semente este primeiro preenchimento no interior de uma forma que é a metade da tela) Esta nova imagem preenchida é o plano de fundo. Qualquer pixel aqui que tenha um 1 é o plano de fundo, e qualquer pixel que tenha 0 é o primeiro plano. Percorra a imagem e encontre os pixels de primeiro plano. Comece uma enchente de enchimento em qualquer encontrar. OU esta nova imagem preenchida com sua imagem Canny da etapa 1, e você está pronto. Respondeu em 26 de janeiro 10 às 18: 41OpenCV Lections: 4. Trabalhando com os canais, o processamento de limiar, preenchimento de enchimento Lections na análise de imagem, OpenCV 4. Trabalhando com os canais, o processamento de limiar, enchimento de enchimento. Exemplo: Detecção de bolas de bilhar svi. nl wikiimg SeedAndThreshold02.png uralvision. blogspot perevalovdsgmail USU IMM Outono 2010 O formato do ABC 1. Nome da função 2. O que ele faz 3. Para o que é usado 4. Anúncio e descrição da lista de parâmetros 5 Exemplo D: - Código de trabalho cpp, que lê a imagem, que transporta o processamento e exibe a imagem na tela ou grava em um arquivo usando a função imwrite - Imagem de entrada (png ou jpg) - Resultado de (png ou jpg) Geral Operações sobre imagens Operações comuns em imagens divididas - Particionamento em mesclagem de canais - Fusão de canais redimensionados - altere o tamanho de () cvtColor - converta espaços de cores () - Funções para auto-estudo no Problema Prático 1, veja a distribuição de sobrenomes na uralvisão. Blogspot split e merge - description O split de função divide a imagem multicanal em canais. Função combinar pontos juntos um multi-canal de imagem única. Na maioria das vezes, eles são usados ​​separadamente para cada processamento de imagem a cores, bem como para várias manipulações dos canais. Dividir e mesclar - uma lista de opções Anúncio e descrição da lista de parâmetros: void split (Const Mat mtx, Vector mv) mtx - a imagem de cor original mv - o conjunto de resultados é imagem de 1 canal void merge (Const vector mv, Mat Dst) mv - o conjunto original de imagem de 1 canal dst - a imagem resultante da imagem e imagem de cores - um exemplo Tarefa - a troca de imagem de cor de entrada coloca o canal vermelho e azul e para calcular a imagem de 1 canal que representa o brilho. Imagem do tapete imread (C: abc-blocks. png) carregar a imagem de entrada imshow (Imagem de entrada, imagem) planos de vetores divididos (Imagem, planos) Imagem de partição em três planos de canal imshow (Azul, planos 0) imshow (Verde, planos 1 ) Imshow (Vermelho, planos 2) planos vetoriaisIzm (3) Muda os sites Vermelho e Azul: planosIzm 0 planos 2 planosIzm 1 planos 1 planosIzm 2 planos 0 Mat imageIzm mesclar (PlanesIzm, imageIzm) imshow (Resultado, imageIzm) Cálculo do brilho de acordo com Para a fórmula 0.299 R 0.587 G 0.114 B (Mas, de fato, é direito de fazer com cvtColor) Mat grey 0.299 aviões 2 0.587 planos 1 0.114 planos 0 imshow (Grey, cinza) dividir e mesclar - um exemplo de aplicação dividida e mesclada - com memória 1. É o seu dado ao trabalhar com divisão e fusão 2. No exemplo acima - se você mudar imageIzm, as coisas mudarão se a imagem - A resposta a essas perguntas é Prática, objetivo 2. Operações por pixel Per - Limiar de operações de pixel - Threshold adaptiveThreshold - Adapti Ve Threshold () min, max - min, max () abs - valor absoluto de take () pow - exponentiation () sqrt - root quadrado () randu - preenchido com valores aleatórios () limiar - uma descrição Função thresholdperforms limiar processamento do imagem. Na maioria das vezes, ele é usado para destacar objetos de pixels de interesse na imagem. Limite - uma lista de opções Anúncio e descrição da lista de parâmetros: limite duplo (Const Mat src, Mat dst, intervalo duplo, Double maxVal, int thresholdType) src anddst - Entrada e saída de imagem de 1 canal. Permitiu ser igual a dst src. Thresh - Limite máximo - O novo valor máximo (usado para THRESHBINARY, THRESHBINARYINV) thresholdType - Tipo de função do processamento de limiar: THRESHBINARY THRESHBINARYINV THRESHTRON THRESHTOZERO THRESHTOZEROINV THRESHOTSU (- há um limiar automaticamente e seu valor de retorno) - uma lista Das opções limiarType - função de limiar de tipo: THRESHBINARY THRESHBINARYINV THRESHTRON THRESHTOZERO THRESHTOZEROINV THRESHOTSU (- há um limiar automaticamente e seu valor de retorno) limiar - um exemplo de aplicação Problema - a imagem do campo de bilhar destaca os pixels que não são campo (condições de disparo De modo que o campo - escuro) Imagem do tapete imread (C: billiard. png) carregar a imagem de entrada imshow (Imagem de entrada, imagem) planos vetoriais divididos (imagem, planos) Cinzento cinza 0.299 planos 2 0.587 planos 1 0.114 planos 0 trono duplo 50.0 O limite é escolhido empiricamente limite (Gray, cinza, 50.0, 255.0, CVTHRESHBINARY) imshow (Threshold, gray) th Reenviar - um exemplo de aplicação Por favor, note: identificamos apenas pixels e não campo. Para encontrar as coordenadas dos centros de bolas e posição de sinalização - requer processamento adicional. Trabalhando com Regiões Trabalhando com Regiões floodFill - Alocação de regiões conectadas operações morfológicas dilatação - dilatação () erosão - Erosão () floodFill - descrição Função floodFillprovide uma área de preenchimento, a partir de um pixel (x, y), com desligamento de limites especificado usando um 4 - ou 8 - pixels adjacentes. Importante: ele prejudica a imagem original - como ela preenche. 1. Na maioria das vezes, é usado para destacar áreas identificadas pelo processamento do limite, para análise subseqüente. 2. Também pode ser usado para remover pequenos ruídos na imagem binária (em contraste com a dilatação da erosão - não estragar os limites de áreas maiores). 3.Se melhorar a caixa geral encontrada na área de 1 pixel em todos os lados e fazer o preenchimento, da maneira que você pode eliminar o orifício interno na área. FloodFill - uma lista de opções Anúncio e descrição da lista de parâmetros: int floodFill (Mat image, Point seed, Scalar newVal, Rect rect 0 Scalar loDiff Scalar (), Scalar upDiff Scalar (), int flags 4) imagem - A imagem de entrada , 1 ou 3 canais, 8 ou 32 bits. Semente - Pixel, a partir do qual começar a derramar rect - Caixa de encadernação encontrada pelo campo loDiff, UpDiff - diferença permitida com seus vizinhos (Ou - com pixel embrionário, se as bandeiras FLOODFILLFIXEDRANGE) ou seja, um novo pixel deve satisfazer o valor Novo valor - loDiff

Комментарии