Atividade 5: Filtros mais avançados

Recursos do Minicurso

Na seção anterior, vimos como criar um filtro azul e pensamos sobre como fazer um filtro cinza. Agora, vamos criar juntos o nosso filtro cinza!

Exemplo – Criar um filtro cinza

Vamos modificar a imagem do gatinho abaixo com nosso filtro cinza!

# Precisamos importar o pacote PIL para manipular pixels
from PIL import Image

# Abrir a imagem do gato
img = Image.open("cat.png")

# Aplicar filtro cinza
for i in range(img.size[0]): # Para cada coluna
    for j in range(img.size[1]): # Para cada linha
        color = img.getpixel( (i,j)) # Capturar a cor
        GREY = (color[0] + color[1] + color[2]) // 3 # Média dos valores RGB
        img.putpixel((i,j),(GREY, GREY, GREY)) # Definir nova cor cinza

# Salvar a imagem com o filtro
img.save("Mycat.png")

Lembre-se: para deixar um pixel cinza, os três valores RGB precisam ser iguais.
Mas se você apenas usar um valor fixo (ex: 200), a imagem toda vai virar um tom de cinza, e não será um filtro sobre a imagem original.

Qual é a melhor forma de “cinzar” um pixel? Podemos fazer a média entre os valores RGB do pixel. Use // para fazer divisão inteira e garantir que o resultado seja um número inteiro.

Uau! Aqui está nosso gato com o filtro cinza:

Exemplo – Filtro parcial

Agora, vamos pensar em como aplicar um filtro apenas em uma parte do nosso lindo gatinho.

# Precisamos importar o pacote PIL para manipular pixels
from PIL import Image

# Abrir a imagem do gato
img = Image.open("cat.png")

# Aplicar filtro cinza em uma parte
for i in range((img.size[0] // 2)): # Metade das colunas
    for j in range((img.size[1] // 2)): # Metade das linhas
        color = img.getpixel((i,j)) # Capturar a cor
        GREY = (color[0] + color[1] + color[2]) // 3 # Média dos valores RGB
        img.putpixel((i,j),(GREY, GREY, GREY)) # Aplicar tom cinza

# Salvar imagem com filtro
img.save("Mycat.png")

Uau! Aqui está nosso gato com o filtro aplicado só em um quarto da imagem (canto superior esquerdo):

Desafio – Crie seu próprio filtro parcial

Agora é a sua vez! Escolha a parte da imagem que quiser e aplique filtros diferentes no seu gatinho fofo. Que divertido!

Abrir no Replit

Advanced

Não seria ótimo se pudéssemos simplificar os passos acima? Vamos fazer isso usando as funções filter() e convert() do Pillow ImageFilter.

Para usar a função filter(), você pode passar um tipo de filtro do ImageFilter.
Exemplo: image.filter(ImageFilter.BLUR) aplica um efeito borrado.
Ou ImageFilter.CONTOUR para um efeito de contorno, tipo desenho.

Para a imagem img que abrimos acima:

    blurredImage = img.filter(ImageFilter.BLUR) 
    blurredImage.save("myCatBlurred.jpg")

Você verá a imagem do gato salva com efeito borrado. Teste outros filtros até achar um que goste!

Além disso, podemos usar a função convert() para transformar a imagem em preto e branco.
Use o modo "L" para escala de cinza e "RGB" para manter as cores normais.

Vamos testar:

    greyscaleImage = img.convert("L")
    greyscaleImage.save("myCatBW.jpg")

Se você combinar filter() com convert("L"), terá algo como isto – purrfeito!
gato preto e branco borrado de cabeça para baixo