Travesseiro Python - Guia rápido
No mundo digital de hoje, encontramos muitas imagens digitais. No caso de estarmos trabalhando com a linguagem de programação Python, ela fornece muitas bibliotecas de processamento de imagem para adicionar recursos de processamento de imagem às imagens digitais.
Algumas das bibliotecas de processamento de imagem mais comuns são: OpenCV, Python Imaging Library (PIL), Scikit-image, Pillow. No entanto, neste tutorial, estamos nos concentrando apenas emPillow module e tentará explorar vários recursos deste módulo.
O Pillow é construído em cima do PIL (Python Image Library). PIL é um dos módulos importantes para processamento de imagens em Python. No entanto, o módulo PIL não é compatível desde 2011 e não é compatível com o python 3.
O módulo Pillow oferece mais funcionalidades, roda em todos os principais sistemas operacionais e suporte para python 3. Ele suporta uma ampla variedade de imagens como “jpeg”, “png”, “bmp”, “gif”, “ppm”, “tiff”. Você pode fazer quase tudo em imagens digitais usando o módulo de almofada. Além da funcionalidade básica de processamento de imagem, incluindo operações pontuais, filtragem de imagens usando kernels de convolução integrados e conversões de espaço de cores.
Arquivos de imagens
A biblioteca de imagens Python é mais adequada para arquivamento de imagens e aplicativos de processamento em lote. O pacote de travesseiros Python pode ser usado para criar miniaturas, converter de um formato para outro e imprimir imagens, etc.
Display de imagem
Você pode exibir imagens usando a interface Tk PhotoImage, BitmapImage e Windows DIB, que pode ser usada com PythonWin e outros kits de ferramentas baseados em Windows e muitos outros kits de ferramentas de interface gráfica do usuário (GUI).
Para fins de depuração, há um método show () para salvar a imagem em disco que chama o utilitário de exibição externa.
Processamento de imagem
A biblioteca Pillow contém todas as funcionalidades básicas de processamento de imagem. Você pode fazer redimensionamento, rotação e transformação de imagens.
O módulo Pillow permite que você extraia alguns dados estatísticos da imagem usando o método de histograma, que mais tarde pode ser usado para análise estatística e aumento automático de contraste.
Este capítulo descreve como instalar o pacote de travesseiros em seu computador.
Instalar o pacote de travesseiro é muito fácil, especialmente se você estiver instalando usando pip.
Instalando travesseiro usando pip
Para instalar o travesseiro usando pip, basta executar o comando abaixo em seu prompt de comando -
python -m pip install pip
python -m pip install pillow
No caso, se pip e travesseiro já estiverem instalados em seu computador, os comandos acima simplesmente mencionarão o 'requirement already satisfied'como mostrado abaixo -
Para exibir a imagem, a biblioteca de travesseiros está usando uma classe de imagem dentro dela. O módulo de imagem dentro do pacote de travesseiro contém algumas funções embutidas importantes, como carregar imagens ou criar novas imagens, etc.
Abrindo, girando e exibindo uma imagem
Para carregar a imagem, simplesmente importamos o módulo de imagem do travesseiro e chamamos o Image.open(), passando o nome do arquivo da imagem.
Em vez de chamar o módulo Pillow, chamaremos o módulo PIL para torná-lo compatível com versões anteriores de um módulo mais antigo chamado Python Imaging Library (PIL). É por isso que nosso código começa com“from PIL import Image” ao invés de “from Pillow import Image”.
Em seguida, vamos carregar a imagem chamando o Image.open() function, que retorna um valor do tipo de dados do objeto Imagem. Qualquer modificação que fizermos no objeto de imagem pode ser salva em um arquivo de imagem com osave()método. O objeto de imagem que recebemos usandoImage.open(), posteriormente pode ser usado para redimensionar, cortar, desenhar ou outras chamadas de método de manipulação de imagem neste objeto Image.
Exemplo
O exemplo a seguir demonstra a rotação de uma imagem usando almofada python -
from PIL import Image
#Open image using Image module
im = Image.open("images/cuba.jpg")
#Show actual Image
im.show()
#Show rotated Image
im = im.rotate(45)
im.show()
Resultado
Se você salvar o programa acima como Example.py e executar, ele exibirá as imagens originais e giradas usando o utilitário de exibição PNG padrão, como segue -
Actual image
Rotated image (45 degrees)
Atributos do Módulo de Imagem
A instância da classe Image possui alguns atributos. Vamos tentar entender alguns deles por exemplo -
Image.filename
Esta função é usada para obter o nome do arquivo ou o caminho da imagem.
>>>image = Image.open('beach1.jpg')
>>> image.filename
'beach1.jpg'
Formato de imagem
Esta função retorna o formato do arquivo de imagem como 'JPEG', 'BMP', 'PNG', etc.
>>> image = Image.open('beach1.jpg')
>>>
>>> image.format
'JPEG'
Image.mode
É usado para obter o formato de pixel usado pela imagem. Os valores típicos são “1”, “L”, “RGB” ou “CMYK”.
>>> image.mode
'RGB'
Tamanho da imagem
Ele retorna a tupla que consiste na altura e no peso da imagem.
>>> image.size
(1280, 721)
Largura da imagem
Ele retorna apenas a largura da imagem.
>>> image.width
1280
Altura da imagem
Ele retorna apenas a altura da imagem.
>>> image.height
721
Image.info
Ele retorna um dicionário contendo dados associados à imagem.
>>> image.info
{'jfif': 257, 'jfif_version': (1, 1), 'dpi': (300, 300), 'jfif_unit': 1, 'jfif_density': (300, 300), 'exif': b"Exif\x00\x00MM\x00*\x00\x00\x00
....
....
\xeb\x00\x00'\x10\x00\x00\xd7\xb3\x00\x00\x03\xe8"}
Image.palette
Ele retorna a tabela de paletas de cores, se houver.
>>> image.palette
Output above - nenhum
Este capítulo elabora tópicos, incluindo como ler e salvar uma imagem no Pillow.
Lendo uma imagem
Ler e escrever imagens usando a biblioteca de travesseiros é muito simples, com a ajuda de PIL.Image module function.
Sintaxe
Image.open(fp, mode=’r’)
Onde
fp- Um nome de arquivo (string), objeto pathlib.Path ou um objeto de arquivo. O objeto de arquivo deve implementar os métodos read (), seek () e tell () e ser aberto no modo binário.
mode - É um argumento opcional, se fornecido, deve ser 'r'.
Return value - Um objeto de imagem.
Error - Se o arquivo não puder ser encontrado ou a imagem não puder ser aberta e identificada.
Exemplo
A seguir está um exemplo muito simples, onde vamos abrir uma imagem de qualquer formato (que estamos usando.jpg), exiba-o em uma janela e salve-o (local padrão) com outro formato de arquivo (.png)
from PIL import Image
image = Image.open('beach1.jpg')
image.show()
image.save('beach1.bmp')
image1 = Image.open('beach1.bmp')
image1.show()
No exemplo acima, importamos o módulo de imagem da biblioteca PIL e, em seguida, chamamos o Image.open()função para ler uma imagem do disco, que retorna um tipo de dados de objeto de imagem. Ele determinará automaticamente o tipo de arquivo observando o conteúdo do arquivo. Para ler, oopen() função aceita um filename(string), uma path object ou um image(file) objeto.
Então, usando a função open (), estamos realmente lendo a imagem. Image.open () lerá a imagem e obterá todas as informações relevantes da imagem.
Resultado
Se você salvar o programa acima como Example.py e executar, ele exibirá as imagens originais (.jpg) e as imagens salvas novamente (.bmp) usando o utilitário de exibição PNG padrão, como segue -
Actual image
Resaved image (.bmp)
Salvar uma imagem
A função save () grava uma imagem em um arquivo. Como para a função de leitura (open ()), a função save () aceita um nome de arquivo, um objeto de caminho ou um objeto de arquivo que foi aberto para gravação.
Sintaxe
Image.save(fp, format=None, **params)
Onde,
fp - Um nome de arquivo (string), objeto pathlib.Path ou objeto de arquivo.
format- Substituição de formato opcional. Se omitido, o formato a ser usado é determinado pela extensão do nome do arquivo. Se um objeto de arquivo foi usado em vez de um nome de arquivo, este parâmetro deve sempre ser usado.
options - Parâmetros extras para o gravador de imagens.
Return value - nenhum
KeyError - Se o formato de saída não puder ser determinado a partir do nome do arquivo, use a opção de formato para resolver isso.
IOError - Se o arquivo não pôde ser gravado, o arquivo pode ter sido criado e pode conter dados parciais.
Resumindo, a sintaxe acima salvará a imagem com o nome de arquivo fornecido. Se nenhum formato for especificado, ele será baseado na extensão do nome de arquivo atual. Para fornecer instruções adicionais ao redator, usamos opções de palavras-chave.
image.save('beach1.bmp')
No exemplo acima, ele salva o arquivo com base na extensão do arquivo para determinar o tipo de imagem, por exemplo - o acima irá criar um arquivo bmp em nosso diretório de trabalho atual.
Você também pode especificar explicitamente o tipo de arquivo como um segundo parâmetro -
image.save('beach1.gif', 'GIF')
Às vezes, é necessário ter todas as imagens de altura e largura iguais. Uma maneira de conseguir isso é criando uma miniatura de todas as imagens usando a função thumbnail () da biblioteca de travesseiros.
Este método modifica a imagem para conter uma versão em miniatura dela mesma e o tamanho da imagem não será maior do que o tamanho fornecido.
O método calcula um tamanho de miniatura apropriado para preservar o aspecto da imagem, chama o draft () method para configurar o leitor de arquivos (quando aplicável) e, por fim, redimensionar a imagem.
Sintaxe
Image.thumbnail(size, resample=3)
Onde,
Size - Tamanho necessário
Resample- Filtro de reamostragem opcional. Pode ser um destes PIL.Image.NEAREST, PIL.Image.BILINEAR, PIL.Image.BICUBIC ou PIL.Image.LANCZOS. Se omitido, o padrão é PIL.Image.BICUBIC.
Returns - nenhum
Exemplo
O exemplo a seguir demonstra a criação de uma miniatura usando travesseiro python -
from PIL import Image
def tnails():
try:
image = Image.open('images/cat.jpg')
image.thumbnail((90,90))
image.save('images/thumbnail.jpg')
image1 = Image.open('images/thumbnail.jpg')
image1.show()
except IOError:
pass
tnails()
Resultado
Se você salvar o programa acima como Example.py e executar, ele exibirá a miniatura criada usando o utilitário de exibição PNG padrão, como segue -
Original image
Output image
O pacote de travesseiro permite colar uma imagem em outra. A função merge () aceita um modo e uma tupla de imagens como parâmetros e os combina em uma única imagem.
Sintaxe
Image.merge(mode, bands)
Onde,
mode - O modo a ser usado para a imagem de saída.
bands - Uma sequência contendo uma imagem de banda única para cada banda na imagem de saída. Todas as bandas devem ter o mesmo tamanho.
Return value - Um objeto de imagem.
Usando a função merge (), você pode mesclar as bandas RGB de uma imagem como -
from PIL import Image
image = Image.open("beach1.jpg")
r, g, b = image.split()
image.show()
image = Image.merge("RGB", (b, g, r))
image.show()
Ao executar o trecho de código acima, você pode ver a imagem original e a imagem com fusão das bandas RGB conforme mostrado abaixo -
Imagem de entrada
Imagem de saída
Mesclando duas imagens
Da mesma forma, para mesclar duas imagens diferentes, você precisa -
Crie um objeto de imagem para as imagens necessárias usando a função open ().
Ao mesclar duas imagens, você precisa se certificar de que ambas as imagens têm o mesmo tamanho. Portanto, obtenha cada tamanho de ambas as imagens e, se necessário, redimensione-as de acordo.
Crie uma imagem vazia usando a função Image.new ().
Cole as imagens usando a função paste ().
Salve e exiba a imagem resultante usando as funções salvar () e mostrar ().
Exemplo
O exemplo a seguir demonstra a fusão de duas imagens usando o travesseiro python -
from PIL import Image
#Read the two images
image1 = Image.open('images/elephant.jpg')
image1.show()
image2 = Image.open('images/ladakh.jpg')
image2.show()
#resize, first image
image1 = image1.resize((426, 240))
image1_size = image1.size
image2_size = image2.size
new_image = Image.new('RGB',(2*image1_size[0], image1_size[1]), (250,250,250))
new_image.paste(image1,(0,0))
new_image.paste(image2,(image1_size[0],0))
new_image.save("images/merged_image.jpg","JPEG")
new_image.show()
Resultado
Se você salvar o programa acima como Example.py e executar, ele exibirá as duas imagens de entrada e a imagem mesclada usando o utilitário de exibição PNG padrão, como segue -
Imagem de entrada 1
Imagem de entrada 2
Imagem mesclada
Desfocar uma imagem pode ser feito reduzindo o nível de ruído na imagem, aplicando um filtro a uma imagem. O desfoque da imagem é um dos aspectos importantes do processamento de imagem.
o ImageFilter classna biblioteca Pillow fornece vários filtros de imagem padrão. Filtros de imagem podem ser aplicados a uma imagem chamando ofilter() method de objeto Image com o tipo de filtro necessário, conforme definido na classe ImageFilter.
Existem várias técnicas usadas para desfocar imagens e vamos discutir as técnicas mencionadas abaixo.
Borrão simples
Borrão de caixa
Desfoque gaussiano
Todas essas três técnicas vão usar o método 'Image.filter ()' para aplicar o filtro às imagens.
Borrão simples
Ele aplica um efeito de desfoque na imagem conforme especificado por meio de um kernel específico ou uma matriz de convolução.
Sintaxe
filter(ImageFilter.BLUR)
Exemplo
#Import required Image library
from PIL import Image, ImageFilter
#Open existing image
OriImage = Image.open('images/boy.jpg')
OriImage.show()
blurImage = OriImage.filter(ImageFilter.BLUR)
blurImage.show()
#Save blurImage
blurImage.save('images/simBlurImage.jpg')
Ao ser executado, o exemplo acima gera as duas janelas do utilitário de exibição PNG padrão (neste caso, as janelas Photos aplicativo).
Original image
Blurred image
Borrão de caixa
Neste filtro, usamos 'radius' como parâmetro. O raio é diretamente proporcional ao valor do desfoque.
Sintaxe
ImageFilter.BoxBlur(radius)
Onde,
Radius - Tamanho da caixa em uma direção.
Radius 0 - significa que não há desfoque e retorna a mesma imagem.
RRadius 1 & minnus; leva 1 pixel em cada direção, ou seja, 9 pixels no total.
Exemplo
#Import required Image library
from PIL import Image,
#Open existing image
OriImage = Image.open('images/boy.jpg')
OriImage.show()
#Applying BoxBlur filter
boxImage = OriImage.filter(ImageFilter.BoxBlur(5))
boxImage.show()
#Save Boxblur image
boxImage.save('images/boxblur.jpg')
Resultado
Ao ser executado, o exemplo acima gera as duas janelas do utilitário de exibição PNG padrão (neste caso, o aplicativo Fotos do Windows).
Original image
Blurred image
Gaussian Blur
Este filtro também usa o parâmetro de raio e faz o mesmo trabalho que o desfoque de caixa com algumas alterações algorítmicas. Em suma, alterar o valor do raio irá gerar diferentes intensidades de imagens 'Gaussianblur'.
Sintaxe
ImageFilter.GaussianBlur(radius=2)
Onde,
Raio - raio de desfoque
Exemplo
#Import required Image library
from PIL import Image, ImageFilter
#Open existing image
OriImage = Image.open('images/boy.jpg')
OriImage.show()
#Applying GaussianBlur filter
gaussImage = OriImage.filter(ImageFilter.GaussianBlur(5))
gaussImage.show()
#Save Gaussian Blur Image
gaussImage.save('images/gaussian_blur.jpg')
Resultado
Ao ser executado, o exemplo acima gera as duas janelas do utilitário de exibição PNG padrão (neste caso, as janelas Photos aplicativo).
Original image
Blurred image
O corte é uma das operações importantes do processamento de imagem para remover partes indesejadas de uma imagem, bem como para adicionar recursos necessários a uma imagem. É um processo amplamente utilizado em aplicações web, para o upload de uma imagem.
A função crop () da classe image em Pillow requer que a parte seja cortada como um retângulo. A parte do retângulo a ser cortada de uma imagem é especificada como uma tupla de quatro elementos e retorna a parte do retângulo da imagem que foi cortada como um objeto de imagem.
Exemplo
O exemplo a seguir demonstra como girar uma imagem usando o travesseiro python -
#Import required Image library
from PIL import Image
#Create an Image Object from an Image
im = Image.open('images/elephant.jpg')
#Display actual image
im.show()
#left, upper, right, lowe
#Crop
cropped = im.crop((1,2,300,300))
#Display the cropped portion
cropped.show()
#Save the cropped image
cropped.save('images/croppedBeach1.jpg')
Resultado
Se você salvar o programa acima como Example.py e executar, ele exibirá as imagens originais e cortadas usando o utilitário de exibição PNG padrão, como segue -
Imagem original
Imagem recortada
Ao trabalhar em imagens usando a biblioteca de processamento de imagens python, há casos em que você precisa inverter uma imagem existente para obter mais insights dela, para aumentar sua visibilidade ou por causa de seus requisitos.
O módulo de imagem da biblioteca de travesseiros nos permite virar uma imagem com muita facilidade. Vamos usar a função transpor (método) do módulo Imagem para inverter as imagens. Alguns dos métodos mais comumente usados suportados por 'transpose ()' são -
Image.FLIP_LEFT_RIGHT - Para virar a imagem horizontalmente
Image.FLIP_TOP_BOTTOM - Para virar a imagem verticalmente
Image.ROTATE_90 - Para girar a imagem especificando o grau
Exemplo 1: imagem invertida horizontalmente
O exemplo seguinte do Python lê uma imagem, vira horizontalmente e exibe a imagem original e invertida usando o utilitário de exibição PNG padrão -
# import required image module
from PIL import Image
# Open an already existing image
imageObject = Image.open("images/spiderman.jpg")
# Do a flip of left and right
hori_flippedImage = imageObject.transpose(Image.FLIP_LEFT_RIGHT)
# Show the original image
imageObject.show()
# Show the horizontal flipped image
hori_flippedImage.show()
Resultado
Original image
Flipped image
Exemplo 2: imagem invertida verticalmente
O exemplo seguinte do Python lê uma imagem, vira-a verticalmente e exibe a imagem original e invertida usando o utilitário de exibição PNG padrão -
# import required image module
from PIL import Image
# Open an already existing image
imageObject = Image.open("images/spiderman.jpg")
# Do a flip of left and right
hori_flippedImage = imageObject.transpose(Image.FLIP_LEFT_RIGHT)
# Show the original image
imageObject.show()
# Show vertically flipped image
Vert_flippedImage = imageObject.transpose(Image.FLIP_TOP_BOTTOM)
Vert_flippedImage.show()
Resultado
Original Image
Flipped Image
Exemplo 3: girar a imagem em um grau específico
O exemplo Python a seguir lê uma imagem, gira em um grau especificado e exibe a imagem original e girada usando o utilitário de exibição PNG padrão -
# import required image module
from PIL import Image
# Open an already existing image
imageObject = Image.open("images/spiderman.jpg")
# Do a flip of left and right
hori_flippedImage = imageObject.transpose(Image.FLIP_LEFT_RIGHT)
# Show the original image
imageObject.show()
#show 90 degree flipped image
degree_flippedImage = imageObject.transpose(Image.ROTATE_90)
degree_flippedImage.show()
Resultado
Original Image
Rotated Image
A maior parte da imagem digital é um plano bidimensional de pixels e tem largura e altura. O módulo de imagem da biblioteca de travesseiros tem um tamanho de atributo. Esta tupla consiste na largura e altura da imagem como seus elementos. Para redimensionar uma imagem, você chama o método resize () da classe image de travesseiro, fornecendo largura e altura.
Redimensione e salve a imagem redimensionada
O programa para redimensionar e salvar a imagem redimensionada é fornecido abaixo -
#Import required Image library
from PIL import Image
#Create an Image Object from an Image
im = Image.open("images/cat.jpg")
#Display actual image
im.show()
#Make the new image half the width and half the height of the original image
resized_im = im.resize((round(im.size[0]*0.5), round(im.size[1]*0.5)))
#Display the resized imaged
resized_im.show()
#Save the cropped image
resized_im.save('resizedBeach1.jpg')
Resultado
Se você salvar o programa acima como Example.py e executar, ele exibirá as imagens originais e redimensionadas usando o utilitário de exibição PNG padrão, como segue -
Original Image
Resized Image
Você notou que algumas das fotos online têm marca d'água. A marca d'água é definitivamente uma das melhores maneiras de proteger suas imagens do uso indevido. Além disso, é recomendável adicionar marca d'água em suas fotos criativas, antes de compartilhá-las nas redes sociais para evitar que sejam mal utilizadas.
A marca d'água geralmente é um texto ou logotipo sobreposto à foto que identifica quem tirou a foto ou quem detém os direitos sobre a foto.
O pacote de travesseiros nos permite adicionar marcas d'água às suas imagens. Para adicionar marca d'água à nossa imagem, precisamos“Image”, “ImageDraw” e “ImageFont” módulos do pacote de travesseiro.
O módulo 'ImageDraw' adiciona funcionalidade para desenhar gráficos 2D em imagens novas ou existentes. O módulo 'ImageFont' é empregado para carregar arquivos de bitmap, TrueType e OpenType.
Exemplo
O programa python a seguir demonstra como adicionar marca d'água a uma imagem usando o travesseiro python -
#Import required Image library
from PIL import Image, ImageDraw, ImageFont
#Create an Image Object from an Image
im = Image.open('images/boy.jpg')
width, height = im.size
draw = ImageDraw.Draw(im)
text = "sample watermark"
font = ImageFont.truetype('arial.ttf', 36)
textwidth, textheight = draw.textsize(text, font)
# calculate the x,y coordinates of the text
margin = 10
x = width - textwidth - margin
y = height - textheight - margin
# draw watermark in the bottom right corner
draw.text((x, y), text, font=font)
im.show()
#Save watermarked image
im.save('images/watermark.jpg')
Resultado
Suponha que a seguir está a imagem de entrada boy.jpg localizado na imagem da pasta.
Depois de executar o programa acima, se você observar a pasta de saída, poderá ver o arquivo watermark.jpg resultante com a marca d'água como mostrado abaixo -
o ImageFilter modulecontém definições para um conjunto predefinido de filtros, que usamos com o método Image.filter (). Esses filtros são usados para alterar a aparência da imagem.
Exemplo
O exemplo abaixo é Filtrando uma imagem -
from PIL import Image, ImageFilter
im = Image.open('jungleSaf2.jpg')
im1 = im.filter(ImageFilter.BLUR)
im1.show()
im2 = im.filter(ImageFilter.MinFilter(3))
im2.show()
im3 = im.filter(ImageFilter.MinFilter) # same as MinFilter(3)
im3.show()
No programa acima, usamos o MinFilter()método, que é usado para criar um filtro mínimo. Ele escolhe o menor valor de pixel em uma janela com o tamanho fornecido.
ImageFilter.MinFilter(size=3)
Onde,
size - O tamanho do kernel, em pixels.
Resultado
Se você salvar o programa acima e executar, ele mostra a imagem original, a imagem borrada e a imagem borrada com MinFilter usando o utilitário de exibição PNG padrão, como segue -
Original Image
Blurred Image
Image blurred with mini filter
Filtros
A versão atual da biblioteca de travesseiros fornece o conjunto mencionado abaixo de filtros de aprimoramento de imagem predefinidos.
BLUR
CONTOUR
DETAIL
EDGE_ENHANCE
EDGE_ENHANCE_MORE
EMBOSS
FIND_EDGES
SHARPEN
SMOOTH
SMOOTH_MORE
Exemplo
O exemplo de python a seguir aplica o filtro de desfoque em uma imagem, salva-a e exibe-a usando o utilitário de exibição PNG padrão -
#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(BLUR)
img1.save('images/ImageFilter_blur.jpg')
img1.show()
Resultado
Da mesma forma, para o image.filter() método, você pode passar qualquer um dos seguintes parâmetros para obter as respectivas saídas -
CONTOUR
DETAIL
EDGE_ENHANCE
EDGE_ENHANCE_MORE
EMBOSS
FIND_EDGES
SMOOTH
SMOOTH_MORE
SHARPEN
Método Python img.filter (CONTOUR)
O exemplo de python a seguir aplica o filtro CONTOUR à imagem fornecida.
Exemplo
#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(CONTOUR)
img1.save('images/ImageFilter_blur.jpg')
img1.show()
Resultado
Se você salvar o programa acima e executar, ele mostrará a imagem original e a imagem filtrada usando o utilitário de exibição PNG padrão, como segue -
Original image
Filtered image
Método Python img.filter (DETAIL)
O exemplo de python a seguir aplica o filtro DETAIL à imagem fornecida.
Exemplo
#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(DETAIL)
img1.save('images/ImageFilter_blur.jpg')
img1.show()
Resultado
Se você salvar o programa acima e executar, ele mostra a imagem original e a imagem filtrada usando o utilitário de exibição PNG padrão, como segue -
Original image
Filtered image
Método Python img.filter (EDGE_ENHANCE)
O exemplo de python a seguir aplica o filtro EDGE_ENHANCE à imagem fornecida -
Exemplo
#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(EDGE_ENHANCE)
img1.save('images/ImageFilter_blur.jpg')
img1.show()
Resultado
Se você salvar o programa acima e executar, ele mostra a imagem original e a imagem filtrada usando o utilitário de exibição PNG padrão, como segue -
Original image
Filtered image
Método Python img.filter (EDGE_ENHANCE_MORE)
O exemplo de python a seguir aplica o filtro EDGE_ENHANCE_MORE à imagem fornecida.
Exemplo
#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(EDGE_ENHANCE_MORE)
img1.save('images/ImageFilter_blur.jpg')
img1.show()
Resultado
Se você salvar o programa acima e executar, ele mostra a imagem original e a imagem filtrada usando o utilitário de exibição PNG padrão, como segue -
Original image
Filtered image
Método Python img.filter (EMBOSS)
O exemplo de python a seguir aplica o filtro EMBOSS à imagem fornecida.
Exemplo
#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(EMBOSS)
img1.save('images/ImageFilter_blur.jpg')
img1.show()
Resultado
Se você salvar o programa acima e executar, ele mostrará a imagem original e a imagem filtrada usando o utilitário de exibição PNG padrão, como segue -
Original image
Filtered image
Método Python img.filter (FIND_EDGES)
O exemplo de python a seguir aplica o filtro FIND_EDGES à imagem fornecida.
Exemplo
#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(FIND_EDGES)
img1.save('images/ImageFilter_blur.jpg')
img1.show()
Resultado
Se você salvar o programa acima e executar, ele mostrará a imagem original e a imagem filtrada usando o utilitário de exibição PNG padrão, como segue -
Original image
Filtered image
Método Python img.filter (SMOOTH)
O exemplo python a seguir aplica o filtro SMOOTH à imagem fornecida.
Exemplo
#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(SMOOTH)
img1.save('images/ImageFilter_blur.jpg')
img1.show()
Resultado
Se você salvar o programa acima e executar, ele mostrará a imagem original e a imagem filtrada usando o utilitário de exibição PNG padrão, como segue -
Original image
Filtered image
Método Python img.filter (SHARPEN)
O exemplo de python a seguir aplica o filtro SHARPEN à imagem fornecida.
Exemplo
#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(SHARPEN)
img1.save('images/ImageFilter_blur.jpg')
img1.show()
Resultado
Se você salvar o programa acima e executar, ele mostrará a imagem original e a imagem filtrada usando o utilitário de exibição PNG padrão, como segue -
Original image
Filtered image
O exemplo de python a seguir aplica o filtro SHARPEN à imagem fornecida.
Exemplo
#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(SHARPEN)
img1.save('images/ImageFilter_blur.jpg')
img1.show()
Resultado
Se você salvar o programa acima e executar, ele mostrará a imagem original e a imagem filtrada usando o utilitário de exibição PNG padrão, como segue -
Original image
Filtered image
o ImageColor O módulo contém cores em formatos diferentes organizados em tabelas e também contém conversores de especificadores de cores no estilo CSS3 para tuplas RGB.
Nomes de Cores
O módulo ImageColor suporta os seguintes formatos de strings -
Especificadores de cores hexadecimais, fornecidos como #rgb ou #rrggbb. Por exemplo, # 00ff00 representa verde puro.
# 00ff00 cor hexadecimal, o valor do vermelho é 0 (0% vermelho), o valor verde é 255 (100% verde) e o valor azul do RGB é 0 (0% azul).
Cilíndrico - representações de coordenadas (também conhecidas como HSL) da cor # 00ff00 matiz: 0,33, saturação: 1,00 e também o valor de luminosidade de 00ff00 é 0,50.
O módulo Image Color fornece cerca de 140 nomes de cores padrão, com base nas cores suportadas pelo sistema X Window e pela maioria dos navegadores da web. Os nomes das cores não diferenciam maiúsculas de minúsculas.
Método ImageColor.getrgb ()
Converta uma string de cores em uma tupla RGB. Se a string não puder ser analisada, uma exceção ValueError é gerada por esta função.
Sintaxe
PIL.ImageColor.getrgb(color)
Onde,
Argumentos: color - Uma string colorida
Valor de retorno: (vermelho, verde, azul [, alfa])
Exemplo 1
from PIL import ImageColor
# using getrgb
img = ImageColor.getrgb("blue")
print(img)
img1 = ImageColor.getrgb("purple")
print(img1)
Resultado
(0, 0, 255)
(128, 0, 128)
Exemplo 2
#Import required image modules
from PIL import Image,ImageColor
# Create new image & get color RGB tuple.
img = Image.new("RGB", (256, 256), ImageColor.getrgb("#add8e6"))
#Show image
img.show()
Resultado
ImageColor. Método getcolor ()
Este método é o mesmo que getrgb (), porém, converte o valor RGB em um valor de escala de cinza, se o modo não for. Os comandos gráficos suportam desenho de forma e cor de anotação de texto ou uma imagem de paleta. Se a string não puder ser analisada, esta função gerará uma exceção ValueError.
Sintaxe
PIL.ImageColor.getcolor(color, mode)
Onde,
Argumentos - uma string de cor
Valor de retorno - (graylevel [, alpha]) ou (red, green, blue [, alpha])
Exemplo
#Import required image modules
from PIL import Image,ImageColor
# using getrgb
img = ImageColor.getrgb("skyblue")
print(img)
img1 = ImageColor.getrgb("purple")
print(img1)
Resultado
(135, 206, 235)
(128, 0, 128)
o ‘ImageDraw’módulo fornece suporte gráfico 2D simples para objeto de imagem. Geralmente, usamos este módulo para criar novas imagens, anotar ou retocar imagens existentes e para gerar gráficos em tempo real para uso na web.
Os comandos gráficos suportam o desenho de formas e anotações de texto.
Uma imagem pode ser bem pensada para ser uma matriz bidimensional de pixels (elementos de imagem). Um pixel é o menor ponto de cor suportado.
A origem do sistema de coordenadas bidimensional usado por ImageDraw, está no upper left corner da imagem.
O esquema de cores do travesseiro que usamos é RGB. A representação e suporte RGB de cores são fornecidos pelo móduloImageColor.
bitmap, OpenType ou TrueType são as fontes aceitáveis para anotações de texto.
A maioria dos comandos de desenho pode exigir um parâmetro de caixa delimitadora que especifica a área da imagem à qual o comando deve ser aplicado.
Uma sequência de coordenadas pode ser representada como [(x0, y0), (x1, y1),… (xn, yn)].
Para alguns comandos de desenho, exigimos valores de ângulo.
Exemplo
O exemplo de python a seguir desenha uma linha na imagem fornecida -
#Import required libraries
import sys
from PIL import Image, ImageDraw
#Create Image object
im = Image.open("images/logo.jpg")
#Draw line
draw = ImageDraw.Draw(im)
draw.line((0, 0) + im.size, fill=128)
draw.line((0, im.size[1], im.size[0], 0), fill=128)
#Show image
im.show()
Resultado
Se você salvar o programa acima como Example.py e executar, ele desenha uma linha na imagem e a exibe usando o utilitário de exibição PNG padrão, da seguinte maneira -
Tela de pintura
Um ImageDraw é uma superfície drawable Pillow (ou seja, uma tela) de uma imagem.
ImageDraw.Draw (img) retorna uma representação de tela drawable do parâmetro Image img. O fundo da tela é a imagem "img".
Exemplo
O exemplo de python a seguir desenha texto na imagem fornecida -
#Import required modules from Pillow package
from PIL import Image, ImageDraw, ImageFont
# get an image
base = Image.open('images/boy.jpg').convert('RGBA')
# make a blank image for the text, initialized to transparent text color
txt = Image.new('RGBA', base.size, (255,255,255,0))
# get a font
fnt = ImageFont.truetype('E:/PythonPillow/Fonts/Pacifico.ttf', 40)
# get a drawing context
d = ImageDraw.Draw(txt)
# draw text, half opacity
d.text((14,14), "Tutorials", font=fnt, fill=(255,255,255,128))
# draw text, full opacity
d.text((14,60), "Point", font=fnt, fill=(255,255,255,255))
out = Image.alpha_composite(base, txt)
#Show image
out.show()
Resultado
Desenhar formas usando o módulo 'ImageDraw'
O módulo ImageDraw nos permite criar diferentes formas criando primeiro um objeto de desenho com a imagem com a qual deseja trabalhar e depois aplicando-o. Algumas das formas comuns que podemos desenhar usando o módulo 'ImageDraw' são as seguintes -
Linha
A seguir, a sintaxe para desenhar uma linha usando o travesseiro python -
draw.line(xy, fill=None, width=0)
o line()método desenha uma linha do canto superior esquerdo para o canto inferior direito da caixa delimitadora xy e da tela. A linha é preenchida com preenchimento de cor. Os valores padrão de Nenhum e 0, respectivamente, são para os parâmetros preenchimento e largura, que são opcionais.
Exemplo
from PIL import Image, ImageDraw
img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)
draw.line((200, 100, 300, 200), fill=(0, 0, 0), width=10)
img.show()
Resultado
Eclipse
A seguir está a sintaxe para desenhar uma elipse usando o travesseiro python -
draw.ellipse(xy, fill=None, outline=None)
o ellipse()método desenha a elipse cercada pela caixa delimitadora xy no desenho. A forma é preenchida usando preenchimento de cor e o perímetro em contorno de cor. Os valores padrão de Nenhum são para os parâmetros preenchimento e largura, que são opcionais.
Exemplo
from PIL import Image, ImageDraw
img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)
draw.ellipse((200, 125, 300, 200), fill=(255, 0, 0), outline=(0, 0, 0))
img.show()
Resultado
Retângulo
A seguir, a sintaxe para desenhar um retângulo usando o travesseiro python -
draw.rectangle(xy, fill=None, outline=None)
o rectangle()método desenha o retângulo dado a caixa delimitadora xy no desenho. A forma é preenchida usando preenchimento de cor e o perímetro em contorno de cor. Os valores padrão de Nenhum são para os parâmetros preenchimento e largura, que são opcionais.
from PIL import Image, ImageDraw
img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)
draw.rectangle(
(200, 125, 300, 200),
fill=(255, 0, 0),
outline=(0, 0, 0))
img.show()
Resultado
Polígono
A seguir, a sintaxe para desenhar um retângulo usando o travesseiro python -
draw.polygon(seq, fill=None, outline=None)
o polygon()O método desenha um polígono conectando com linhas retas os locais da sequência de coordenadas seq no desenho. A primeira e a última coordenadas em seq também são conectadas por uma linha reta. A forma é preenchida usando preenchimento de cor e o perímetro em contorno de cor. Os parâmetros de preenchimento e contorno são opcionais com valores padrão Nenhum.
from PIL import Image, ImageDraw
img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)
draw.polygon(
((200, 200), (300, 100), (250, 50)),
fill=(255, 0, 0),
outline=(0, 0, 0))
img.show()
Resultado
A Python Imaging Library (PIL) contém algum suporte básico para sequências de imagens (formatos de animação). FLI / FLC, GIF e alguns formatos experimentais são os formatos de sequência suportados. Os arquivos TIFF também podem conter mais de um quadro.
Abrindo um arquivo de sequência, o PIL carrega automaticamente o primeiro quadro da sequência. Para se mover entre quadros diferentes, você pode usar os métodos de busca e indicação.
from PIL import Image
img = Image.open('bird.jpg')
#Skip to the second frame
img.seek(1)
try:
while 1:
img.seek(img.tell() + 1)
#do_something to img
except EOFError:
#End of sequence
pass
Resultado
raise EOFError
EOFError
Como podemos ver acima, você obterá uma exceção EOFError quando a sequência terminar.
A maioria dos drivers na versão mais recente da biblioteca permite apenas que você busque o próximo quadro (como no exemplo acima), para retroceder o arquivo, você pode ter que reabri-lo.
Uma classe de iterador de sequência
class ImageSequence:
def __init__(self, img):
self.img = img
def __getitem__(self, ix):
try:
if ix:
self.img.seek(ix)
return self.img
except EOFError:
raise IndexError # end of sequence
for frame in ImageSequence(img):
# ...do something to frame...
Você pode escrever texto em imagens passando a localização do texto, o texto em si e a cor do texto. Podemos passar vários outros parâmetros para este método.
Exemplo
from PIL import Image, ImageDraw
img = Image.open(beach1.jpg')
d1 = ImageDraw.Draw(img)
d1.text((28, 36), "Hello, TutorialsPoint!", fill=(255, 0, 0))
img.show()
img.save("images/image_text.jpg")
Entrada
Resultado
Se você salvar o programa acima como Example.py e executar, ele adicionará o texto fornecido a ele e o exibirá usando o utilitário de exibição PNG padrão, como segue -
Selecionando a fonte
Existem várias maneiras de selecionar a fonte usada para escrever na imagem. Podemos carregar fontes diretamente do sistema, passando o caminho completo para a função, ou podemos usar ImageFont para carregar uma fonte TrueType.
Exemplo
from PIL import Image, ImageDraw, ImageFont
img = Image.open('images/logo.jpg')
d1 = ImageDraw.Draw(img)
myFont = ImageFont.truetype('E:/PythonPillow/Fonts/FreeMono.ttf', 40)
d1.text((0, 0), "Sample text", font=myFont, fill =(255, 0, 0))
img.show()
img.save("images/image_text.jpg")
Resultado
Neste capítulo, usamos o numpy para armazenar e manipular os dados da imagem usando a biblioteca de imagens python - “travesseiro”.
Antes de prosseguir com este capítulo, abra o prompt de comando no modo de administrador e execute o seguinte comando nele para instalar o numpy -
pip install numpy
Note - Isso funciona apenas se você tiver o PIP instalado e atualizado.
Criação de imagem de Numpy Array
Criar uma imagem RGB usando PIL e salvá-la como um arquivo jpg. No exemplo a seguir, iremos -
Crie uma matriz de 150 por 250 pixels.
Preencha a metade esquerda da matriz com laranja.
Preencha a metade direita da matriz com azul.
from PIL import Image
import numpy as np
arr = np.zeros([150, 250, 3], dtype=np.uint8)
arr[:,:100] = [255, 128, 0]
arr[:,100:] = [0, 0, 255]
img = Image.fromarray(arr)
img.show()
img.save("RGB_image.jpg")
Resultado
Criação de imagens em escala de cinza
A criação de imagens em tons de cinza é ligeiramente diferente da criação de uma imagem RGB. Podemos usar o array bidimensional para criar uma imagem em tons de cinza.
from PIL import Image
import numpy as np
arr = np.zeros([150,300], dtype=np.uint8)
#Set grey value to black or white depending on x position
for x in range(300):
for y in range(150):
if (x % 16) // 8 == (y % 16)//8:
arr[y, x] = 0
else:
arr[y, x] = 255
img = Image.fromarray(arr)
img.show()
img.save('greyscale.jpg')
Resultado
Criação de matriz numpy a partir de uma imagem
Você pode converter a imagem PIL em array numpy e vice-versa. Um pequeno programa para demonstrar o mesmo é declarado abaixo.
Exemplo
#Import required libraries
from PIL import Image
from numpy import array
#Open Image & create image object
img = Image.open('beach1.jpg')
#Show actual image
img.show()
#Convert an image to numpy array
img2arr = array(img)
#Print the array
print(img2arr)
#Convert numpy array back to image
arr2im = Image.fromarray(img2arr)
#Display image
arr2im.show()
#Save the image generated from an array
arr2im.save("array2Image.jpg")
Resultado
Se você salvar o programa acima como Example.py e executar -
Ele exibe a imagem original.
Exibe a matriz recuperada dele.
Converte a matriz de volta em imagem e a exibe.
Como usamos o método show (), as imagens são exibidas usando o utilitário de exibição PNG padrão, como segue.
[[[ 0 101 120]
[ 3 108 127]
[ 1 107 123]
...
...
[[ 38 59 60]
[ 37 58 59]
[ 36 57 58]
...
[ 74 65 60]
[ 59 48 42]
[ 66 53 47]]
[[ 40 61 62]
[ 38 59 60]
[ 37 58 59]
...
[ 75 66 61]
[ 72 61 55]
[ 61 48 42]]
[[ 40 61 62]
[ 34 55 56]
[ 38 59 60]
...
[ 82 73 68]
[ 72 61 55]
[ 63 52 46]]]
Original Image
Image constructed from the array