Leitores como você ajudam a apoiar o MUO. Quando você faz uma compra usando links em nosso site, podemos ganhar uma comissão de afiliado. Consulte Mais informação.

Fazer um belo esboço requer muito tempo e esforço. Felizmente, a programação evoluiu para que agora você possa facilmente transformar imagens e criar belos designs. Uma técnica impressionante que você pode realizar é converter uma imagem em um esboço digital.

Embora um esboço mecânico não pareça exatamente com o seu próprio desenho a lápis, vale a pena experimentar a saída. Aprenda a programar um aplicativo desses usando o módulo OpenCV na super amigável linguagem Python.

O Módulo OpenCV

OpenCV é uma biblioteca de código aberto desenvolvida e mantida pela Intel de métodos de visão computacional usados ​​para processamento de imagem e visão computacional. Ele torna simples para os usuários criar aplicativos otimizados, interagir com imagens e vídeos em tempo real e selecionar o algoritmo ideal para suas necessidades.

Algumas das aplicações populares de

instagram viewer
OpenCV inclui detecção de rosto, rastreamento automático de rosto em cinematografia, filtros de mídia social, reconhecimento de placa de carroe monitoramento por CFTV. Para usar o módulo OpenCV em Python, abra seu terminal e digite o seguinte comando:

pip instalar opencv-python

Como converter qualquer imagem em um esboço usando Python

Para converter sua imagem favorita em um esboço digital, comece colocando-a na mesma pasta que um novo programa Python, para fácil referência. Em seguida, comece a criar seu programa usando as etapas a seguir.

Este código de exemplo está disponível em um Repositório GitHub e é gratuito para você usar sob a licença MIT.

O primeiro passo é importar o módulo OpenCV para o seu ambiente. Assim que o OpenCV estiver disponível, você poderá usar sua funcionalidade para realizar várias tarefas. Passe o caminho do seu arquivo de imagem para o eu estou lendo() função para carregá-lo. Armazene sua imagem em uma variável chamada imagem1 aqui - para referência futura.

Armazene o título da janela em uma variável chamada window_name. Isso será útil quando você optar por exibir a imagem usando o imshow() função. Esta função requer dois parâmetros: o título e a imagem que você deseja exibir.

importar cv2

image1 = cv2.imread('imagem.jpg')
window_name = 'Imagem real'
cv2.imshow (window_name, image1)

Depois de obter a imagem desejada, você precisa realizar cinco operações para transformá-la em um esboço. Primeiro, converta a imagem colorida em tons de cinza. Você pode fazer isso com o cvtColor() função. Esta função recebe a imagem cujas cores você deseja alterar e um código de conversão como COLOR_BGR2GRAY.

grey_img = cv2.cvtColor (image1, cv2.COLOR_BGR2GRAY)

Depois de obter uma imagem em tons de cinza, inverta suas cores. Neste ponto, você precisa entender como um computador forma uma imagem. Uma imagem consiste em muitos pixels minúsculos com intensidades variadas. Em uma imagem colorida, cada pixel contém componentes vermelho, verde e azul, cada um com uma intensidade que varia de 0 a 255.

Em uma imagem em tons de cinza, existem apenas tons de cinza, então a intensidade de um pixel varia entre 0 e 1. Para inverter as intensidades de pixel desta imagem, passe a imagem em tons de cinza para o bitwise_not() função.

Como o nome sugere, esta função inverte o valor de cada pixel em seu equivalente complementar. Todos os pixels maiores que 0 são definidos como 0 e todos os pixels iguais a 0 são definidos como 255.

inverter = cv2.bitwise_not (grey_img)

Depois de inverter as intensidades dos pixels, você pode suavizar a imagem com a ajuda do Gaussian Blur. O processo Gaussian Blur faz uso de um filtro gaussiano. Um filtro gaussiano é um filtro passa-baixo que permite apenas a passagem de baixas frequências, removendo o componente de alta frequência de um sinal ou imagem.

OpenCV's GaussianBlur() função aceita quatro parâmetros. Estes são um objeto de matriz que atua como a imagem de origem, o ksize (tamanho do kernel) e sigmaX (o desvio padrão do kernel gaussiano).

Suponha que você tenha uma fotografia física em suas mãos. Se você quiser borrá-lo, pode aplicar pedaços de papel manteiga ou pergaminho sobre ele. Você pode imaginar o kernel como este pedaço de papel transparente. Digitalmente, isso acontece um pouco diferente. Para desfocar, aumentar a nitidez e aplicar outros efeitos em uma imagem digital, multiplique uma matriz pela intensidade dos pixels da imagem.

O ksize é sempre um número ímpar positivo. Conforme você aumenta o tamanho do kernel, o desfoque aumenta. Para entender o sigmaX, suponha que você esteja aplicando cera em um papel. À medida que você aplica cera, o papel fica uniformemente translúcido. Da mesma forma, você deve manter os valores do kernel próximos a um ponto específico (a média). O valor sigmaX define a diferença entre a média e outros valores dos pixels em uma imagem.

Passe a imagem invertida, o tamanho do kernel como (21, 21) e 0 desvio padrão para a função Gaussian Blur:

borrão = cv2.GaussianBlur (inverter, (21, 21), 0)

Passe a imagem desfocada para a função bitwise_not() novamente para invertê-la:

borrão invertido = cv2.bitwise_not (desfoque)

Finalmente, use o dividir() função e para executar a divisão por elemento da matriz de imagem em tons de cinza e a matriz de imagem desfocada invertida com uma escala de 256.

sketch = cv2.divide (grey_img, invertedblur, scale=256.0)

Essencialmente, a função executa a seguinte operação:

defdividir(grey_img, b, invertidoblur=256.0):
retornar (grey_img * escala) / invertdblur

Armazene o resultado em uma variável chamada sketch. Para salvar a imagem final, passe um nome para o arquivo de saída e a imagem de esboço para o imwrite() função. Para verificar isso, você pode usar a função imread() para carregar a imagem de esboço salva, dar um título à janela e exibi-la usando a função imshow().

Use o waitkey() função passando 0 para exibir a janela da imagem original e a janela do esboço gerado até que você pressione qualquer tecla.

cv2.imwrite("sketch.jpeg", esboço)
imagem = cv2.imread("sketch.jpeg")
window_name ='Imagem de esboço'
cv2.imshow (window_name, imagem)
cv2.waitKey(0)

Reúna todo o código e você terá seu programa pronto.

Saída de amostra da conversão de uma imagem em um esboço usando este programa Python

Você pode escolher uma bela imagem de paisagem e executá-la no programa para gerar esse impressionante esboço digital.

Em uma imagem de retrato, o programa gera o seguinte esboço digital.

Você pode experimentar os parâmetros da função de acordo com sua preferência para gerar o esboço digital desejado.

Processamento de Imagens e Visão Computacional

Processamento de imagem e visão computacional são dois campos da tecnologia intimamente relacionados. Ambos envolvem a alteração de imagens digitais para obter os resultados desejados. O processamento de imagem se concentra em melhorar uma imagem, enquanto a visão computacional procura encontrar padrões e objetos dentro de uma imagem para entendê-la.

Scikit-image é outra biblioteca Python que fornece uma ampla variedade de funções de processamento de imagem. Possui vários módulos pré-compilados, filtros, camadas, transformações e muito mais. Se você está procurando um módulo para usar em modelos de aprendizado profundo, como CNN e RNN, talvez queira explorar o Torchvision.