O processamento de imagem de limite adaptável Python-OpenCV usa a função adaptiveThreshold para obter contornos de imagem

☞ ░ para o antigo diretório Python Bowen do macaco

I. Introdução

No " caso de imagem colorida de 32 bits de processamento de limite de função de processamento de limite OpenCV " introduziu a função de limite, mas o processamento de limite de imagem de limite para algumas imagens iluminadas irregularmente, este método de segmentação de limite global não obtém bons resultados.

Na operação de limiar de imagem, estamos mais preocupados em separar a área de destino e a área de fundo da imagem binarizada.É difícil alcançar o efeito de segmentação ideal apenas por meio de um limiar fixo. A escala de cinza na imagem não é uniforme, então geralmente os limites de diferentes áreas na imagem são diferentes. Desta forma, é necessário um método para realizar o processamento de limiar calculando o limiar local de acordo com o brilho ou distribuição de cinza de diferentes áreas da imagem. Este método é o processamento de imagem de limiar adaptativo. Na verdade, pode ser chamado de método de limiar local. O adaptiveThreshold no OpenCV é esse método.

Dois, introdução da sintaxe adaptiveThreshold

Sintaxe de chamada:
adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)

Descrição:

  • src: imagem de origem, deve ser uma imagem em tons de cinza de 8 bits
  • dst: a imagem de destino processada, o tamanho e o tipo são iguais aos da imagem de origem
  • maxValue: usado para especificar o valor de cinza da configuração de pixel que atende à condição
  • adaptiveMethod: O algoritmo de limite adaptativo usado. Existem dois tipos de algoritmo ADAPTIVE_THRESH_MEAN_C (média do bloco de vizinhança local) ou ADAPTIVE_THRESH_GAUSSIAN_C (soma ponderada gaussiana do bloco de vizinhança local). O método de cálculo de ADAPTIVE_THRESH_MEAN_C é calcular o valor médio da vizinhança e subtrair o primeiro O valor de seis parâmetros C, o método de cálculo de ADAPTIVE_THRESH_GAUSSIAN_C é calcular o valor uniforme gaussiano da vizinhança e subtrair o valor do sexto parâmetro C. Use o modo BORDER_REPLICATE | BORDER_ISOLATED ao processar limites
  • thresholdType: tipo de limite, só pode ser THRESH_BINARY ou THRESH_BINARY_INV, consulte a tabela de "Processamento de limite de imagem" acima para obter detalhes
  • blockSize: indica o tamanho do bloco de vizinhança, usado para calcular o limite da área, geralmente escolhe 3, 5, 7 ...
  • C: representa uma constante, que é uma constante extraída de uma média uniforme ou ponderada, geralmente um número positivo, mas também pode ser um número negativo ou zero
  • Valor de retorno: a imagem processada

Três, explicação complementar

  1. O limite de binarização da área da imagem com maior brilho geralmente será maior, e o limite de binarização da área da imagem com menor brilho será menor.
  2. Em uma imagem em tons de cinza, a área onde o valor da escala de cinza muda obviamente é frequentemente o contorno do objeto, portanto, dividir a imagem em pequenas partes para calcular o limite geralmente obterá o contorno da imagem. Portanto, a função adaptiveThreshold pode não apenas binarizar a imagem em tons de cinza, mas também realizar a extração de bordas.
  3. O motivo da extração da borda é que quando o bloco é muito pequeno, como block_size = 3 ou 5 ou 7, o grau de "adaptação" é muito alto, ou seja, é fácil parecer que os valores dos pixels no bloco são quase os mesmos, de modo que não pode ser binarizado , Mas só pode alcançar a binarização onde o gradiente é grande na borda, e acontece que é uma função de extração de borda
  4. Quando blockSize é definido com um valor relativamente alto, como blockSize = 21 ou 31 ou 41, adaptiveThreshold é uma função binária
  5. blockSize deve ser um número ímpar maior que 1 (o princípio ainda não está claro),
  6. Se o método do valor médio for usado, o valor médio será 180, a diferença delta será 10 e maxValue será 255. Então, os pixels com tons de cinza menores que 170 são 0, pixels maiores ou iguais a 170 são 255, se for binarização reversa, pixels com tons de cinza menores que 170 são 255 e pixels maiores ou iguais a 170 são 0

Quatro caso

import cv2

img = cv2.imread(r'F:\screenpic\1.jpg',cv2.IMREAD_GRAYSCALE)
newImg = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 3, 5)
cv2.imshow('img',img)
cv2.imshow('newImg',newImg)
cv2.waitKey(60000)

Efeito operacional:
Imagem original:
Insira a descrição da imagem aqui
O seguinte é a imagem resultante da definição de diferentes blockSizes. O tamanho do bloco da imagem esquerda é 31 e o blockSize da imagem direita é 3:
Insira a descrição da imagem aqui
pode ser visto que o blockSize é pequeno, o efeito de reconhecimento de contorno é óbvio e quando o blockSize é grande, é um binário imagem.

Coluna paga sobre o velho macaco

A coluna paga de Lao Yuan " Desenvolvimento de aplicativos Python de interface gráfica usando PyQt " apresenta especificamente os tutoriais básicos de desenvolvimento de interface gráfica PyQt com base em Python, e a coluna paga "Coluna de desenvolvimento de áudio e vídeo Moviepy " detalha os métodos relacionados e uso de edição de áudio e vídeo moviepy e processamento de síntese O método é usado para processar cenas de edição e síntese relacionadas. As duas colunas somam apenas 19,9 yuans, o que é adequado para leitores iniciantes que têm uma certa base Python, mas nenhum conhecimento de patente relevante. Essas duas colunas pagas têm colunas gratuitas correspondentes, mas os artigos na coluna paga são mais específicos, mais aprofundados e mais casos.

Catálogo de artigos de coluna pagos : " Diretório de artigos de colunas de desenvolvimento de áudio e vídeo Moviepy ", " Use PyQt para desenvolver o diretório de colunas de aplicativos Python de interface gráfica ".

Para o conteúdo de desenvolvimento de áudio e vídeo Moviepy, consulte a introdução guiada de " Biblioteca de edição de áudio e vídeo Python MoviePy1.0.3 Guia de tutorial chinês e download de ferramenta executável ".

Para aqueles que não têm base em Python, você pode aprender Python do zero por meio da coluna gratuita de Lao Yuan " Coluna: Diretório de tutorial básico em Python ".

Se você estiver interessado e disposto a apoiar os leitores de Old Ape, seja bem-vindo ao comprar coluna paga.

Aprenda Python com o velho macaco!

☞ ░ para o antigo diretório Python Bowen do macaco

Acho que você gosta

Origin blog.csdn.net/LaoYuanPython/article/details/108558834
Recomendado
Clasificación