Você sabe fazer tratamento de imagens com Python? Aprenda agora! É fácil e fica pronto com poucas linhas de código!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Fala Impressionadores! Na aula de hoje quero te mostrar como transformar foto em desenho com Python, tipo aqueles filtros que você tem nas redes sociais ou até mesmo nos programas da Microsoft.
E aí, bora aprender como tratar imagens com Python?
Nós vamos fazer essa manipulação de imagens com Python utilizando a biblioteca OpenCV.
Então eu vou te mostrar qual a função do OpenCV e o que é possível fazer com OpenCV.
Além disso, vou te ensinar como mostrar imagem no Python com essa biblioteca e como editar várias imagens simultaneamente, caso você queira aplicar esse tratamento em mais de uma imagem.
Assim você não vai precisar ficar inserindo as imagens de forma manual!
Vamos começar?
A primeira coisa a fazer é baixar a biblioteca OpenCV.
Para isso você vai rodar no seu terminal (local onde você instala as bibliotecas):
>pip install opencv-python
Na hora de importar vamos importar como cv2:
Qual a lógica do OpenCV?
O OpenCV nos permite manipular as imagens de uma forma muito eficiente, o que esta biblioteca faz basicamente é fragmentar uma imagem em seu menor elemento (pixel) e para cada pixel ela atribui um número.
Cada píxel tem uma cor, sabemos que todas as cores podem ser formadas por uma mistura de azul, verde e vermelho e chamamos essa propriedade de padrão RGB.
O OpenCV usa este padrão só que na ordem BGR, isso significa que nossa imagem vai resultar em três números que representam a quantidade de azul, verde e vermelho encontrados nela, exemplo:
(255, 0 , 255) Cada cor pode ir de 0 a 255.
Passo a passo para construir o código:
A primeira coisa que vamos fazer é transformar os pixels em preto e branco.
As imagens de desenho no Python resultam em preto e branco e os programas de tratamento funcionam melhor em imagens em preto e branco também.
Vamos importar a imagem da nossa pasta e rodar um código para visualizar:
Perfeito, o primeiro passo de importar a imagem já foi feito, agora vamos transformar a imagem em preto e branco.
Função → Cv2.cvtColor():
Vamos criar uma variável para a imagem em preto e branco e utilizar a função cvtColor() para converter a cor.
Dentro dos parênteses da função vamos passar a imagem e qual conversão queremos fazer.
O OpenCV possui na sua lista uma série de conversões possíveis, vamos usar o padrão que é COLOR_BGR2GRAY.
Agora para aplicar o estilo de desenho nesta imagem vamos ter que Criar o que chamamos de máscara.
Essencialmente nós vamos precisar inverter as cores desta imagem criando uma imagem invertida, tudo que é preto vamos transformar em branco e vice-versa.
Nosso objetivo com isso é conseguir os contornos da imagem.
Imagem invertida:
Função – cv2.bitwise_not():
Vamos usar esta função para inverter as cores.
Feito isso já podemos transformar a imagem em desenho.
Função → cv2.GaussianBlur():
Vamos aplicar a função GaussianBlur() no código e fazer alguns testes para ajustar a imagem do desenho criado.
Este código funciona quase como um filtro, podemos enxergá-lo assim, para funcionar precisamos inserir 3 informações:
Para deixar nosso código mais visual vamos trocar os nomes kernel_size por imagem_invertida e criar uma variável onde vamos atribuir o valor do tamanho (size):
→ qtde_filtro = 15
Aplicando o desenho com 15 de filtro, a imagem já aparece um pouco mais embaçada:
Aplicando 1515:
O valor 1515 é muito alto, ficou tão borrado que não conseguimos mais enxergar a imagem.
Aplicando 55:
Vamos seguir com o valor de 15, podemos ajustar depois se for necessário.
Agora só precisamos inverter a imagem como fizemos anteriormente criando outra variável → imagem_blur_invertida.
Estamos com a imagem branco e preto vamos passar para preto e branco.
Atenção! Uma dica importante, o famoso pulo do gato!
Estamos trabalhando com tratamento de imagem, se pegarmos nossa imagem preta a branca original → imagem_pb e dividir ela pela imagem_blur_invertida, vamos ter um resultado de uma imagem com o filtro de Blur aplicado nela.
O resultado deste cálculo será a nossa imagem_desenho.
Função – cv2.divide():
Após fazer este tratamento temos que tomar um cuidado, lembra que cada cor pode ir de 0 a 255?
0 = preto
255 = branco
Quando dividimos imagens parecidas uma pela outra, podemos supor que as quantidades de pixels de cada uma também são parecidas, ou seja, dessa divisão vai resultar um valor que provavelmente está entre 0 e 1.
O valor dos pixels serão similares com uma variação pequena entre eles, 0,5, 0,6, 0,8…
Esta proximidade vai gerar um borrão preto e podemos não ver a imagem.
Para resolver este problema vamos ter que colocar uma multiplicação no código → scale.
Scale = 256.0
Ou seja, vamos pegar o resultado da divisão e multiplicá-lo por 256, dessa forma ao invés da escala ficar entre 0 e 1 vai ficar de 0 a 255 que é a escala padrão.
Filtro 95
Perfeito! Conseguimos nosso resultado!
Ainda podemos alterar o código para que ele altere várias imagens, agora está alterando apenas uma por vez.
Passo a passo:
Função – imwrite():
Esta função salva as nossas imagens na pasta que criamos → img_tratado.
Para esta função funcionar temos que inserir o nome da pasta que criamos img_tratado, a variável arquivo entre chaves e a variável onde queremos salvar as imagens → imagem_desenho
Agora vamos fazer com que a função rode para várias imagens.
Para isso vamos importar a biblioteca os, pois ela permite ler as pastas onde as imagens estão salvas.
Função – os.listdir():
Vamos usar a função listdir() para criar uma lista de arquivos com a variável imagens.
Utilizando a estrutura de repetição For:
Usando o for vamos ler o nome do arquivo, aplicar o filtro e rodar o código para todas as imagens da pasta.
Resultado:
Agora podemos passar para o formato de desenho quantas imagens salvarmos na nossa pasta!
Terminamos o nosso desafio → Tratamento de Imagens com Python!
O nosso último desafio foi construir um código para mesclar PDFs em Python. Clique no link para saber mais!
Você já teve que transformar e tratar imagens? Hoje nós transformamos fotos em desenhos no Python!
O objetivo desta aula foi resolver este desafio, transformar imagens em desenho e fazer com que o código rode para várias imagens. Tudo isso com poucas linhas de código!
Aprenda este passo a passo e faça seu próprio código em Python!
Espero que tenham gostado da aula! Abraço,
Para acessar outras publicações de Python, clique aqui!
Expert em conteúdos da Hashtag Treinamentos. Auxilia na criação de conteúdos de variados temas voltados para aqueles que acompanham nossos canais.