Search
Close this search box.
Edição e Processamento de Imagens em Python: conheça a biblioteca Pillow
aprendiz artificial

Posts Relacionados:

Processamento de imagens é essencial em inteligência artificial. Nesse post, apresentaremos como fazer edição e processamento de imagens com Pillow.

Receba nossa newsletter

Aplicações de machine learning, deep learning e inteligência artificial frequentemente requerem imagens digitais pré-processadas. Além de pré-processamento, a edição de imagens também é muito utilizada para aumentar artificialmente a quantidade de dados para treinar redes neurais. O Python possui algumas bibliotecas excelentes para processamento e edição de imagens. Neste post, vamos falar sobre uma delas, a biblioteca Pillow.

Pillow é um fork da biblioteca Python Imaging Libary (PIL). Ela trabalha com inúmeros formatos de imagens e possui uma série de funcionalidades para processamento como mudança de tamanho, filtros, rotação, cropping, entre outras. Vamos conhecer algumas dessas funcionalidades.

Instalação

É recomendável instalar a biblioteca Pillow usando um ambiente virtual para evitar incompatibilidades, pois ela não é atualizada tão rapidamente quanto outras bibliotecas.

Para instalar com pip:

				
					pip install Pillow
				
			

Para instalar com conda:

				
					conda install -c anaconda pillow
				
			

Abrindo uma imagem com Pillow

Para começar, é necessário importar o módulo da biblioteca que será usado. Nós vamos usar o Image por enquanto.

				
					from PIL import Image

				
			

Qualquer fotografia que você tem pode ser usada para acompanhar este post. Mas, se você quiser a mesma imagem que usamos, o link está aqui.

Para abrir a imagem com o Pillow, é preciso colocar sua path e o nome da imagem. Se você não sabe a path, clique no arquivo da imagem com o botão direito e ache a path em propriedades. Outra forma é, se a imagem estiver na mesma pasta que seu código no VScode, clique no arquivo da imagem com o botão direito e vai aparecer a opção copy path ou o equivalente em português. No nosso caso, a extensão da imagem é .jpg. Confira qual é a sua e modifique seu código de acordo. No VScode, a path já vai incluir o nome da imagem com a extensão correta.

O código abaixo abre e plota a imagem usando o Pillow.

				
					img = Image.open('sua_path/nome_da_sua_imagem.jpg')
img.show()
				
			

Executando o código acima, a imagem irá abrir numa janela contendo algumas informações sobre ela. Note que o formato não é o da imagem original, mas da imagem que o Pillow abriu. Por isso, mesmo se sua imagem for .jpg, o formato provavelmente aparecerá com .PNG. Nosso resultado é mostrado abaixo. As informações estão no canto à direita.

Manipulando algumas propriedades de uma imagem

O Pillow pode ser usado para verificar várias propriedades de uma imagem e também para transformá-las. O código abaixo mostra como verificar o formato, tamanho e modo de cores da imagem.

				
					print(img.format, img.size, img.mode)
				
			

No caso da imagem que usamos, o resultado é mostrado abaixo.

				
					JPEG (640, 356) RGB
				
			

O Pillow também é capaz de transformar várias propriedades de imagens.

Para alterar o formato de uma imagem, basta salvá-la com uma extensão diferente. Se você quiser alterar também o nome da nova imagem, apenas troque o nome usado dentro dos parênteses.

				
					img.save('img.png')
img.save('img.eps')
img.save('img.tiff')
				
			

Outra propriedade facilmente transformada é o tamanho da imagem usando a método .resize(). É possível mudar esse parâmetro usando o tamanho original como referência como no código abaixo. Nesse exemplo, reduzimos as dimensões originais pela metade. Note que é preciso garantir que o resultado do novo tamanho seja do tipo int.

				
					img_menor = img.resize((int(img.size[0]*0.5), int(img.size[1]*0.5)))
img_menor.save('img_menor.jpg')
				
			

Também é possível alterar o tamanho da imagem usando diretamente o número de pixeis que queremos. No exemplo abaixo, a nova imagem foi definida com 250 pixeis de largura e 250 de altura. Mas atenção: isso frequentemente distorce a imagem.

				
					img_menor = img.resize((250, 250))
img_menor.save('img_menor2.jpg')
				
			

O modo de cor da imagem pode ser manipulado com o método .convert(). No código abaixo, usamos um for loop para criar várias versões da nossa imagem, cada uma com um modo de cor específico. Veja que usamos a imagem menor criada acima como imagem de entrada.

				
					
modo = ["1",'L','P', 'RGBA']
for m in modo:
    file_name = "img_modo_"+str(m)
    imx = img_menor.convert(m)
    imx.save(file_name+'.png')
				
			

Os resultados são mostrados abaixo (ordem: RGBA, 1, P, L).

Cropping

Outro método importante do Pillow é o .crop(). Ele corta a imagem a partir de uma caixa definida com quatro coordenadas (esquerda, topo, direita, base). No exemplo abaixo, cortamos a imagem em duas metades.

				
					box = (0, 0, 320, 356)
img_cropped = img.crop(box)
img_cropped.save('img_crop_esquerda.jpg')

box = (320, 0, 640, 356)
img_cropped = img.crop(box)
img_cropped.save('img_direita.jpg')
				
			

Rotações

A imagem também pode ser girada ou transposta com o Pillow. Para rotacioná-la, é preciso usar o método .rotate() e indicar o número de graus que serão usados.

				
					img_70 = img.rotate(70)
img_70.save('img70.jpg')
				
			

Já para fazer a transposição completa da imagem, o método é o .transpose().

				
					img_transpose = img.transpose(Image.FLIP_LEFT_RIGHT)
img_transpose.save('imgTranspose.jpg')
				
			

Filtros e manipulações de cores

O método .point() possibilita a manipulação das intensidades dos pixeis individualmente. Acoplado a uma função, ele permite alterações bastante variadas.

				
					imgPoint = img.point(lambda i: i * 2)
imgPoint.save('img_point.jpg')
				
			

Esse método também pode ser aplicado em canais individuais de cores como mostrado abaixo. Nesse exemplo, a manipulação foi feita apenas no canal azul (B).

				
					imgB = img.split()
R, G, B = 0, 1, 2
imgB = imgB[B].point(lambda i: i * 2)
imgB.save('img_pointB.jpg')
				
			

Além de todas essas funcionalidades, o Pillow também tem vários filtros. Eles podem ser usados para criar diversos efeitos. Abaixo, mostramos alguns exemplos de como usar o filtro .BoxBlur(). Veja que é possível variar a intensidade do blur aplicada à imagem.

				
					from PIL import ImageFilter

imgFilter = img_menor.filter(ImageFilter.BoxBlur(1))
imgFilter.save('imgBlur1.jpg')
imgFilter = img_menor.filter(ImageFilter.BoxBlur(2))
imgFilter.save('imgBlur2.jpg')
imgFilter = img_menor.filter(ImageFilter.BoxBlur(5))
imgFilter.save('imgBlur5.jpg')
				
			

Conclusões

Nesse post, apresentamos um pouco sobre a biblioteca Pillow. Ela é extremamente usada em técnicas de inteligência artificial e deep learning, principalmente em aplicações com imagens como reconhecimento facial e localizações de objetos. Para saber mais, consulte a documentação oficial.

Imagem com IA Generativa – Dia 274

IA generativa img 274

Arte com IA generativa: imagem do dia

Todos os dias, postamos um exemplo de imagem artística gerada com inteligência artificial.

Tutoriais

Postagens Mais Recentes

Outras Postagens Que Podem Interessar

Veja
Mais

Fique em contato

Se inscreva para receber nossa newsletter com novidades.

aprendiz artificial