Pular para o conteúdo

Como Usar o Módulo Pillow para Manipulação de Imagens

[

Processamento de Imagens com a Biblioteca Pillow do Python

por Stephen Gruppetta (intermediário)

Quando você olha para uma imagem, você vê os objetos e pessoas nela. No entanto, quando você lê uma imagem programaticamente com o Python ou qualquer outra linguagem, o computador vê uma matriz de números. Neste tutorial, você aprenderá como manipular imagens e realizar processamento básico de imagens usando a biblioteca Pillow do Python.

O Pillow e sua predecessora, PIL, são as bibliotecas Python originais para lidar com imagens. Embora existam outras bibliotecas Python para processamento de imagens, o Pillow continua sendo uma ferramenta importante para entender e lidar com imagens.

Para manipular e processar imagens, o Pillow fornece ferramentas semelhantes às encontradas em softwares de processamento de imagens como o Photoshop. Algumas das bibliotecas de processamento de imagens Python mais modernas são construídas sobre o Pillow e muitas vezes fornecem funcionalidades mais avançadas.

Neste tutorial, você aprenderá como:

  • Ler imagens com o Pillow
  • Realizar operações básicas de manipulação de imagem
  • Usar o Pillow para processamento de imagem
  • Usar o NumPy junto com o Pillow para processamento adicional
  • Criar animações usando o Pillow

Este tutorial fornece uma visão geral do que você pode alcançar com a biblioteca Python Pillow através de alguns de seus métodos mais comuns. Uma vez que você ganhe confiança usando esses métodos, você pode usar a documentação do Pillow para explorar o restante dos métodos da biblioteca. Se você nunca trabalhou com imagens em Python antes, esta é uma ótima oportunidade para começar a usar.

Neste tutorial, você usará várias imagens, que você pode baixar do repositório de imagens do tutorial:

Com essas imagens em mãos, você está pronto para começar com o Pillow.

Operações Básicas de Imagem com a Biblioteca Pillow do Python

A biblioteca Pillow do Python é uma bifurcação de uma biblioteca mais antiga chamada PIL. PIL significa Python Imaging Library, e é uma das bibliotecas mais populares para trabalhar com imagens no Python. O Pillow é uma versão aprimorada do PIL, com desenvolvimento e suporte mais ativos.

Antes de começar a trabalhar com o Pillow, você precisará instalar a biblioteca em sua máquina. Você pode fazer isso executando o seguinte comando no terminal:

pip install pillow

Após a instalação do Pillow, você estará pronto para começar a trabalhar com imagens. Vamos dar uma olhada em algumas operações básicas de imagem usando o Pillow.

O Módulo de Imagem e a Classe de Imagem no Pillow

O primeiro passo para trabalhar com imagens usando o Pillow é entender o módulo de imagem e a classe de imagem. O módulo de imagem é chamado de Image, e a classe de imagem é chamada de Image.

Para começar, você precisará importar o módulo de imagem:

from PIL import Image

Agora você pode usar a classe Image para abrir uma imagem existente no seu sistema de arquivos:

image = Image.open("caminho/para/sua/imagem.jpg")

Agora que você abriu a imagem, você pode realizar várias operações nela, como redimensionar, girar, cortar, aplicar filtros etc. Vamos dar uma olhada em algumas dessas operações básicas.

Manipulação Básica de Imagem

Agora que você abriu uma imagem usando o Pillow, você pode realizar várias operações básicas de manipulação de imagem. Aqui estão algumas das operações que você pode fazer:

  • Redimensionar a imagem:

    resized_image = image.resize((width, height))
  • Girar a imagem:

    rotated_image = image.rotate(angle)
  • Cortar a imagem:

    cropped_image = image.crop((left, upper, right, lower))
  • Salvar a imagem:

    resized_image.save("caminho/para/salvar/imagem.jpg")

Essas são apenas algumas das operações básicas que você pode realizar com o Pillow. A biblioteca oferece uma ampla gama de métodos para manipulação de imagem, então não hesite em explorar a documentação para obter mais informações sobre todas as funcionalidades disponíveis.

Faixas e Modos de uma Imagem na Biblioteca Pillow do Python

Além da manipulação básica de imagem, o Pillow permite acessar informações adicionais sobre a imagem, como as faixas e modos presentes nela.

  • Faixas de uma imagem:

    bands = image.getbands()
  • Modo da imagem:

    mode = image.mode

Essas informações podem ser úteis ao trabalhar com imagem e no processo de processamento da mesma.

Processamento de Imagens Usando o Pillow no Python

Agora que você sabe como realizar algumas operações básicas de manipulação de imagem com o Pillow, vamos explorar o processo de processamento de imagens usando o Pillow no Python.

Filtros de Imagem Usando Núcleos de Convolução

Os filtros de imagem são uma técnica amplamente utilizada para alterar a aparência de uma imagem. O Pillow oferece suporte a vários filtros de imagem, que podem ser aplicados usando núcleos de convolução.

Para usar filtros de imagem no Pillow, você precisará criar um objeto ImageFilter e aplicá-lo à imagem:

from PIL import ImageFilter
blurred_image = image.filter(ImageFilter.BLUR)

Existem vários filtros disponíveis para uso, como desfoque, nitidez, suavização, detecção de bordas, entre outros. Você pode explorar a documentação do Pillow para obter uma lista completa de todos os filtros disponíveis.

Desfoque, Nitidez e Suavização de Imagens

Além dos filtros de convolução, o Pillow também oferece métodos convenientes para aplicar efeitos de desfoque, nitidez e suavização a uma imagem.

  • Desfocar uma imagem:

    blurred_image = image.filter(ImageFilter.BLUR)
  • Tornar uma imagem mais nítida:

    sharpened_image = image.filter(ImageFilter.SHARPEN)
  • Suavizar uma imagem:

    smoothed_image = image.filter(ImageFilter.SMOOTH)

Esses métodos são úteis para melhorar a qualidade visual de uma imagem e podem ser usados em várias aplicações, como edição de fotos e processamento de imagens.

Detecção de Bordas, Realce de Bordas e Sobrancelha

A detecção de bordas é um processo comum em processamento de imagens para identificar regiões de mudanças bruscas de intensidade de cor. O Pillow oferece métodos para aplicar detecção de bordas, realce de bordas e sobrancelha em uma imagem.

  • Detecção de bordas em uma imagem:

    edges_image = image.filter(ImageFilter.FIND_EDGES)
  • Realce de bordas em uma imagem:

    enhanced_edges_image = image.filter(ImageFilter.EDGE_ENHANCE)
  • Realce de bordas em uma imagem com sobrancelha:

    embossed_edges_image = image.filter(ImageFilter.EMBOSS)

Esses métodos são úteis para destacar características importantes de uma imagem e podem ser usados em várias aplicações, como detecção de objetos e processamento de imagens de documentos.

Segmentação de Imagens e Sobreposição: Um Exemplo

Na segmentação de imagens, você divide a imagem original em regiões baseadas em alguma característica ou critério específico. O Pillow oferece métodos para segmentar imagens usando limiarização e realizar sobreposição de imagens.

  • Limiarização de imagem:

    thresholded_image = image.point(lambda p: p > threshold and 255)
  • Erosão e Dilatação:

    eroded_image = image.filter(ImageFilter.MinFilter())
    dilated_image = image.filter(ImageFilter.MaxFilter())
  • Segmentação de imagem usando limiarização:

    segmented_image = image.point(lambda p: p > threshold and 255)
  • Sobreposição de imagens usando o método Image.paste():

    background_image.paste(overlay_image, (x, y), overlay_image)
  • Criação de uma marca d’água:

    image_with_watermark = image.copy()
    image_with_watermark.paste(watermark, (x, y), watermark)

Esses métodos são úteis para dividir uma imagem em regiões e realizar sobreposição de imagens para criar efeitos visuais interessantes.

Manipulação de Imagens com NumPy e Pillow

Além de usar apenas o Pillow, você também pode combinar o NumPy com o Pillow para realizar manipulações mais avançadas de imagens.

Usando o NumPy para Subtrair Imagens uma da Outra

O NumPy é uma biblioteca popular para manipulação de matrizes numéricas no Python. Para usar o NumPy junto com o Pillow, você precisará converter as imagens em matrizes NumPy e, em seguida, realizar as operações desejadas.

  • Usar o NumPy para subtrair imagens uma da outra:

    import numpy as np
    image1 = np.array(image1)
    image2 = np.array(image2)
    subtracted_image = np.abs(image1 - image2)

Usando o NumPy para Criar Imagens

Além de realizar operações matemáticas nas imagens, você também pode usar o NumPy para criar imagens do zero.

  • Usar o NumPy para criar imagens:

    import numpy as np
    image = np.zeros((height, width, 3), dtype=np.uint8)

Criando Animações

O Pillow também permite criar animações a partir de uma sequência de imagens. Você pode usar o método append() para adicionar imagens a uma lista e, em seguida, usar o método save() para salvar a lista como um arquivo GIF animado.

  • Criar animações a partir de uma sequência de imagens:

    images = []
    for i in range(num_frames):
    # Adicione as imagens à lista 'images'
    ...
    images[0].save("animacao.gif", save_all=True, append_images=images[1:], optimize=False, duration=100, loop=0)

Esses são apenas alguns exemplos de como você pode usar o NumPy junto com o Pillow para realizar manipulações avançadas de imagens.

Conclusão

Neste tutorial, você aprendeu como manipular e processar imagens usando a biblioteca Pillow do Python. Você explorou as operações básicas de imagem, como redimensionar, girar e cortar. Você também aprendeu sobre o processamento de imagem usando filtros, a detecção de bordas, a limiarização e a sobreposição de imagens. Além disso, você descobriu como usar o NumPy junto com o Pillow para manipulações avançadas de imagens e animações.

O Pillow é uma poderosa biblioteca Python para trabalhar com imagens e oferece uma ampla gama de funcionalidades para manipulação e processamento de imagens. À medida que você se familiariza com o Pillow, você pode explorar a documentação do Pillow para aprender mais sobre os métodos disponíveis e suas aplicações.

Com o conhecimento adquirido neste tutorial, você está pronto para começar a experimentar e desenvolver suas próprias aplicações de processamento de imagem usando o Python e o Pillow!