Python Pillow - Guida rapida

Nel mondo digitale di oggi, ci imbattiamo in molte immagini digitali. Nel caso in cui stiamo lavorando con il linguaggio di programmazione Python, fornisce molte librerie di elaborazione delle immagini per aggiungere funzionalità di elaborazione delle immagini alle immagini digitali.

Alcune delle librerie di elaborazione delle immagini più comuni sono: OpenCV, Python Imaging Library (PIL), Scikit-image, Pillow. Tuttavia, in questo tutorial, ci stiamo concentrando solo suPillow module e proverò ad esplorare le varie capacità di questo modulo.

Pillow è costruito sopra PIL (Python Image Library). PIL è uno dei moduli importanti per l'elaborazione delle immagini in Python. Tuttavia, il modulo PIL non è supportato dal 2011 e non supporta python 3.

Il modulo Pillow offre più funzionalità, funziona su tutti i principali sistemi operativi e supporta python 3. Supporta un'ampia varietà di immagini come "jpeg", "png", "bmp", "gif", "ppm", "tiff". Puoi fare quasi tutto sulle immagini digitali usando il modulo cuscino. Oltre alla funzionalità di elaborazione delle immagini di base, comprese le operazioni sui punti, il filtraggio delle immagini utilizzando i kernel di convoluzione incorporati e le conversioni dello spazio colore.

Archivi di immagini

La libreria di immagini Python è più adatta per l'archiviazione di immagini e le applicazioni di elaborazione batch. Il pacchetto Python pillow può essere utilizzato per creare miniature, convertire da un formato all'altro e stampare immagini, ecc.

Visualizzazione delle immagini

È possibile visualizzare le immagini utilizzando Tk PhotoImage, BitmapImage e l'interfaccia DIB di Windows, che può essere utilizzata con PythonWin e altri toolkit basati su Windows e molti altri toolkit dell'interfaccia utente grafica (GUI).

Per scopi di debug, esiste un metodo show () per salvare l'immagine su disco che chiama l'utilità di visualizzazione esterna.

Elaborazione delle immagini

La libreria Pillow contiene tutte le funzionalità di elaborazione delle immagini di base. Puoi ridimensionare, ruotare e trasformare le immagini.

Il modulo Pillow consente di estrarre alcuni dati statistici dall'immagine utilizzando il metodo dell'istogramma, che in seguito può essere utilizzato per l'analisi statistica e il miglioramento automatico del contrasto.

Questo capitolo spiega come installare il pacchetto pillow sul tuo computer.

Installare il pacchetto pillow è molto semplice, soprattutto se lo stai installando usando pip.

Installazione di Pillow utilizzando pip

Per installare pillow utilizzando pip, esegui il comando seguente nel prompt dei comandi:

python -m pip install pip
python -m pip install pillow

Nel caso in cui pip e pillow siano già installati nel tuo computer, i comandi sopra menzioneranno semplicemente il 'requirement already satisfied'come mostrato di seguito -

Per visualizzare l'immagine, la libreria di cuscini utilizza una classe di immagini al suo interno. Il modulo immagine all'interno del pacchetto pillow contiene alcune importanti funzioni integrate come, carica immagini o crea nuove immagini, ecc.

Apertura, rotazione e visualizzazione di un'immagine

Per caricare l'immagine, importiamo semplicemente il modulo immagine dal cuscino e chiamiamo il file Image.open(), passando il nome del file dell'immagine.

Invece di chiamare il modulo Pillow, chiameremo il modulo PIL per renderlo compatibile con un vecchio modulo chiamato Python Imaging Library (PIL). Ecco perché il nostro codice inizia con“from PIL import Image” invece di “from Pillow import Image”.

Successivamente, caricheremo l'immagine chiamando il file Image.open() function, che restituisce un valore del tipo di dati dell'oggetto Immagine. Qualsiasi modifica apportata all'oggetto immagine può essere salvata in un file immagine con l'estensionesave()metodo. L'oggetto immagine che abbiamo ricevuto utilizzandoImage.open(), successivamente può essere utilizzato per ridimensionare, ritagliare, disegnare o altri metodi di manipolazione delle immagini su questo oggetto Image.

Esempio

L'esempio seguente mostra la rotazione di un'immagine utilizzando il cuscino in pitone:

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()

Produzione

Se salvi il programma sopra come Example.py ed esegui, visualizza le immagini originali e ruotate utilizzando l'utilità di visualizzazione PNG standard, come segue:

Actual image

Rotated image (45 degrees)

Attributi del modulo immagine

L'istanza della classe Image ha alcuni attributi. Proviamo a capirne alcuni con l'esempio:

Image.filename

Questa funzione viene utilizzata per ottenere il nome del file o il percorso dell'immagine.

>>>image = Image.open('beach1.jpg')
>>> image.filename
'beach1.jpg'

Image.format

Questa funzione restituisce il formato del file immagine come "JPEG", "BMP", "PNG", ecc.

>>> image = Image.open('beach1.jpg')
>>>
>>> image.format
'JPEG'

Image.mode

Viene utilizzato per ottenere il formato pixel utilizzato dall'immagine. I valori tipici sono "1", "L", "RGB" o "CMYK".

>>> image.mode
'RGB'

Dimensione dell'immagine

Restituisce la tupla composta da altezza e peso dell'immagine.

>>> image.size
(1280, 721)

Image.width

Restituisce solo la larghezza dell'immagine.

>>> image.width
1280

Image.height

Restituisce solo l'altezza dell'immagine.

>>> image.height
721

Image.info

Restituisce un dizionario contenente i dati associati all'immagine.

>>> 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

Restituisce la tavola della tavolozza dei colori, se presente.

>>> image.palette

Output above - Nessuno

Questo capitolo elabora argomenti tra cui come leggere e salvare un'immagine in Pillow.

Leggere un'immagine

Leggere e scrivere immagini utilizzando la libreria dei cuscini è molto semplice, con l'aiuto di PIL.Image module function.

Sintassi

Image.open(fp, mode=’r’)

Dove

  • fp- Un nome file (stringa), un oggetto pathlib.Path o un oggetto file. L'oggetto file deve implementare i metodi read (), seek () e tell () ed essere aperto in modalità binaria.

  • mode - È un argomento facoltativo, se fornito, deve essere "r".

  • Return value - Un oggetto immagine.

  • Error - Se non è possibile trovare il file o l'immagine non può essere aperta e identificata.

Esempio

Di seguito è riportato un esempio molto semplice, in cui apriremo un'immagine di qualsiasi formato (stiamo usando.jpg), visualizzalo in una finestra e quindi salvalo (posizione predefinita) con un altro formato di file (.png).

from PIL import Image
image = Image.open('beach1.jpg')
image.show()
image.save('beach1.bmp')
image1 = Image.open('beach1.bmp')
image1.show()

Nell'esempio sopra, importiamo il modulo Immagine dalla libreria PIL e quindi chiamiamo il file Image.open()funzione per leggere un'immagine dal disco, che restituisce un tipo di dati oggetto immagine. Determinerà automaticamente il tipo di file esaminando il contenuto del file. Per la lettura, il fileopen() la funzione accetta un file filename(string), a path object o un image(file) oggetto.

Quindi, usando la funzione open (), stiamo effettivamente leggendo l'immagine. Image.open () leggerà l'immagine e otterrà tutte le informazioni rilevanti dall'immagine.

Produzione

Se salvi il programma sopra come Example.py ed esegui, vengono visualizzate le immagini originali (.jpg) e salvate nuovamente (.bmp) utilizzando l'utilità di visualizzazione PNG standard, come segue:

Actual image

Resaved image (.bmp)

Salvataggio di un'immagine

La funzione save () scrive un'immagine su file. Come per la lettura (funzione open ()), la funzione save () accetta un nome file, un oggetto percorso o un oggetto file che è stato aperto per la scrittura.

Sintassi

Image.save(fp, format=None, **params)

Dove,

  • fp - Un nome file (stringa), un oggetto pathlib.Path o un oggetto file.

  • format- Sostituzione del formato opzionale. Se omesso, il formato da utilizzare è determinato dall'estensione del nome del file. Se è stato utilizzato un oggetto file invece di un nome file, questo parametro deve essere sempre utilizzato.

  • options - Parametri extra per lo scrittore di immagini.

  • Return value - Nessuno

  • KeyError - Se non è stato possibile determinare il formato di output dal nome del file, utilizzare l'opzione format per risolvere il problema.

  • IOError - Se non è stato possibile scrivere il file, il file potrebbe essere stato creato e potrebbe contenere dati parziali.

In breve, la sintassi precedente salverà l'immagine con il nome file specificato. Se non viene specificato alcun formato, si basa sull'estensione del nome file corrente. Per fornire istruzioni aggiuntive all'autore, utilizziamo le opzioni delle parole chiave.

image.save('beach1.bmp')

Nell'esempio sopra, salva il file in base all'estensione del file per determinare il tipo di immagine, ad esempio: quanto sopra creerà un file bmp nella nostra directory di lavoro corrente.

Puoi anche specificare esplicitamente il tipo di file come secondo parametro -

image.save('beach1.gif', 'GIF')

A volte, è necessario avere tutte le immagini di uguale altezza e larghezza. Un modo per ottenere ciò è creare un'anteprima di tutte le immagini utilizzando la funzione thumbnail () dalla libreria dei cuscini.

Questo metodo modifica l'immagine per contenere una versione in miniatura di se stessa e la dimensione dell'immagine non sarà più grande della dimensione specificata.

Il metodo calcola una dimensione della miniatura appropriata per preservare l'aspetto dell'immagine, chiama il file draft () method per configurare il lettore di file (dove applicabile) e, infine, ridimensiona l'immagine.

Sintassi

Image.thumbnail(size, resample=3)

Dove,

  • Size - Dimensioni richieste

  • Resample- Filtro di ricampionamento opzionale. Può essere uno di questi PIL.Image.NEAREST, PIL.Image.BILINEAR, PIL.Image.BICUBIC o PIL.Image.LANCZOS. Se omesso, il valore predefinito è PIL.Image.BICUBIC.

  • Returns - Nessuno

Esempio

L'esempio seguente mostra la creazione di una miniatura utilizzando il cuscino in pitone:

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()

Produzione

Se salvi il programma sopra come Example.py ed esegui, visualizza la miniatura creata utilizzando l'utilità di visualizzazione PNG predefinita, come segue:

Original image

Output image

La confezione del cuscino ti consente di incollare un'immagine su un'altra. La funzione merge () accetta una modalità e una tupla di immagini come parametri e le combina in un'unica immagine.

Sintassi

Image.merge(mode, bands)

Dove,

  • mode - La modalità da utilizzare per l'immagine di output.

  • bands - Una sequenza contenente un'immagine a banda singola per ciascuna banda nell'immagine di output. Tutte le bande devono avere la stessa dimensione.

  • Return value - Un oggetto immagine.

Usando la funzione merge (), puoi unire le bande RGB di un'immagine come -

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()

Eseguendo la parte di codice sopra, puoi vedere l'immagine originale e l'immagine con unire le bande RGB come mostrato di seguito -

Immagine in ingresso

Immagine di output

Unione di due immagini

Allo stesso modo, per unire due immagini diverse, è necessario:

  • Crea un oggetto immagine per le immagini richieste utilizzando la funzione open ().

  • Durante l'unione di due immagini, è necessario assicurarsi che entrambe le immagini abbiano le stesse dimensioni. Pertanto, ottieni ciascuna dimensione di entrambe le immagini e, se necessario, ridimensionale di conseguenza.

  • Crea un'immagine vuota utilizzando la funzione Image.new ().

  • Incolla le immagini utilizzando la funzione paste ().

  • Salvare e visualizzare l'immagine risultante utilizzando le funzioni save () e show ().

Esempio

L'esempio seguente mostra l'unione di due immagini usando il cuscino in pitone:

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()

Produzione

Se salvi il programma sopra come Example.py ed esegui, visualizza le due immagini di input e l'immagine unita utilizzando l'utilità di visualizzazione PNG standard, come segue:

Immagine in ingresso 1

Immagine in ingresso 2

Immagine unita

È possibile sfocare un'immagine riducendo il livello di disturbo nell'immagine applicando un filtro a un'immagine. La sfocatura dell'immagine è uno degli aspetti importanti dell'elaborazione delle immagini.

Il ImageFilter classnella libreria Pillow fornisce diversi filtri immagine standard. I filtri immagine possono essere applicati a un'immagine chiamando il filefilter() method dell'oggetto Image con il tipo di filtro richiesto come definito nella classe ImageFilter.

Esistono varie tecniche utilizzate per sfocare le immagini e discuteremo le tecniche sotto menzionate.

  • Sfocatura semplice

  • Sfocatura casella

  • sfocatura gaussiana

Tutte e tre queste tecniche useranno il metodo "Image.filter ()" per applicare il filtro alle immagini.

Sfocatura semplice

Applica un effetto di sfocatura all'immagine come specificato tramite un kernel specifico o una matrice di convoluzione.

Sintassi

filter(ImageFilter.BLUR)

Esempio

#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')

Durante l'esecuzione, l'esempio precedente genera le due finestre di utilità di visualizzazione PNG standard (in questo caso windows Photos app).

Original image

Blurred image

Sfocatura casella

In questo filtro, usiamo "raggio" come parametro. Il raggio è direttamente proporzionale al valore di sfocatura.

Sintassi

ImageFilter.BoxBlur(radius)

Dove,

  • Radius - Dimensioni della scatola in una direzione.

  • Radius 0 - significa nessuna sfocatura e restituisce la stessa immagine.

  • RRadius 1 & minnus; richiede 1 pixel in ciascuna direzione, ovvero 9 pixel in totale.

Esempio

#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')

Produzione

Durante l'esecuzione, l'esempio sopra genera le due finestre di utilità di visualizzazione PNG standard (in questo caso l'app Foto di Windows).

Original image

Blurred image

Sfocatura gaussiana

Questo filtro utilizza anche il raggio del parametro e svolge lo stesso lavoro della sfocatura del riquadro con alcune modifiche algoritmiche. In breve, cambiando il valore del raggio, si generano diverse intensità di immagini "Gaussianblur".

Sintassi

ImageFilter.GaussianBlur(radius=2)

Dove,

  • Raggio - Raggio di sfocatura

Esempio

#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')

Produzione

Durante l'esecuzione, l'esempio precedente genera le due finestre di utilità di visualizzazione PNG standard (in questo caso windows Photos app).

Original image

Blurred image

Il ritaglio è una delle operazioni importanti dell'elaborazione dell'immagine per rimuovere parti indesiderate di un'immagine e per aggiungere le caratteristiche richieste a un'immagine. È un processo ampiamente utilizzato nelle applicazioni web, per il caricamento di un'immagine.

La funzione crop () della classe immagine in Pillow richiede che la parte venga ritagliata come un rettangolo. La porzione di rettangolo da ritagliare da un'immagine viene specificata come una tupla di quattro elementi e restituisce la parte di rettangolo dell'immagine che è stata ritagliata come oggetto immagine.

Esempio

L'esempio seguente mostra come ruotare un'immagine usando il cuscino in pitone -

#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')

Produzione

Se salvi il programma sopra come Example.py ed esegui, visualizza le immagini originali e ritagliate utilizzando l'utilità di visualizzazione PNG standard, come segue:

Immagine originale

Immagine ritagliata

Mentre si lavora sulle immagini utilizzando la libreria di elaborazione delle immagini Python, ci sono casi in cui è necessario capovolgere un'immagine esistente per ottenere ulteriori informazioni da essa, per migliorarne la visibilità o per le proprie esigenze.

Il modulo immagine della libreria dei cuscini ci consente di capovolgere un'immagine molto facilmente. Useremo la funzione transpose (metodo) dal modulo Immagine per capovolgere le immagini. Alcuni dei metodi più comunemente usati supportati da 'transpose ()' sono:

  • Image.FLIP_LEFT_RIGHT - Per capovolgere l'immagine orizzontalmente

  • Image.FLIP_TOP_BOTTOM - Per capovolgere l'immagine verticalmente

  • Image.ROTATE_90 - Per ruotare l'immagine specificando il grado

Esempio 1: immagine capovolta orizzontalmente

L'esempio seguente Python legge un'immagine, la capovolge orizzontalmente e visualizza l'immagine originale e capovolta utilizzando l'utilità di visualizzazione PNG standard -

# 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()

Produzione

Original image

Flipped image

Esempio 2: immagine capovolta verticalmente

L'esempio di Python seguente legge un'immagine, la capovolge verticalmente e visualizza l'immagine originale e capovolta utilizzando l'utilità di visualizzazione PNG standard -

# 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()

Produzione

Original Image

Flipped Image

Esempio 3: ruota l'immagine a un livello specifico

L'esempio di Python seguente legge un'immagine, ruota a un grado specificato e visualizza l'immagine originale e ruotata utilizzando l'utilità di visualizzazione PNG standard -

# 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()

Produzione

Original Image

Rotated Image

La maggior parte dell'immagine digitale è un piano bidimensionale di pixel e ha una larghezza e un'altezza. Il modulo Immagine dalla libreria di cuscini ha una dimensione di attributo. Questa tupla è composta dalla larghezza e dall'altezza dell'immagine come suoi elementi. Per ridimensionare un'immagine, chiamate il metodo resize () della classe immagine di pillow fornendo larghezza e altezza.

Ridimensiona e salva l'immagine ridimensionata

Di seguito viene fornito il programma per il ridimensionamento e il salvataggio dell'immagine ridimensionata:

#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')

Produzione

Se salvi il programma sopra come Example.py ed esegui, visualizza le immagini originali e ridimensionate utilizzando l'utilità di visualizzazione PNG standard, come segue:

Original Image

Resized Image

Hai notato che alcune delle foto online hanno la filigrana. La filigrana è sicuramente uno dei modi migliori per proteggere le tue immagini da un uso improprio. Inoltre, si consiglia di aggiungere filigrana alle foto creative prima di condividerle sui social media per evitare che vengano utilizzate in modo improprio.

La filigrana è generalmente un testo o un logo sovrapposto alla foto che identifica chi ha scattato la foto o chi possiede i diritti sulla foto.

Il pacchetto Pillow ci consente di aggiungere filigrane alle tue immagini. Per aggiungere filigrana alla nostra immagine, abbiamo bisogno di“Image”, “ImageDraw” e “ImageFont” moduli dal pacchetto cuscino.

Il modulo "ImageDraw" aggiunge funzionalità per disegnare grafica 2D su immagini nuove o esistenti. Il modulo "ImageFont" viene utilizzato per caricare file di font bitmap, TrueType e OpenType.

Esempio

Il seguente programma Python dimostra come aggiungere una filigrana a un'immagine usando il cuscino 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')

Produzione

Supponiamo che la seguente sia l'immagine di input boy.jpg che si trova nell'immagine della cartella.

Dopo aver eseguito il programma sopra, se osservi la cartella di output puoi vedere il file watermark.jpg risultante con la filigrana come mostrato di seguito -

Il ImageFilter modulecontiene le definizioni per un set predefinito di filtri, che abbiamo utilizzato con il metodo Image.filter (). Questi filtri vengono utilizzati per modificare l'aspetto e la sensazione dell'immagine.

Esempio

L'esempio seguente è Filtro di un'immagine -

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()

Nel programma sopra, abbiamo usato il MinFilter()metodo, che viene utilizzato per creare un filtro minimo. Sceglie il valore di pixel più basso in una finestra con la dimensione data.

ImageFilter.MinFilter(size=3)

Dove,

size - La dimensione del kernel, in pixel.

Produzione

Se si salva il programma sopra e lo si esegue, mostra l'immagine originale, l'immagine sfocata e l'immagine sfocata con MinFilter utilizzando l'utilità di visualizzazione PNG standard, come segue:

Original Image

Blurred Image

Image blurred with mini filter

Filtri

La versione corrente della libreria dei cuscini fornisce una serie di filtri predefiniti per il miglioramento delle immagini.

  • BLUR

  • CONTOUR

  • DETAIL

  • EDGE_ENHANCE

  • EDGE_ENHANCE_MORE

  • EMBOSS

  • FIND_EDGES

  • SHARPEN

  • SMOOTH

  • SMOOTH_MORE

Esempio

L'esempio seguente di Python applica il filtro di sfocatura su un'immagine, la salva e la visualizza utilizzando l'utilità di visualizzazione PNG standard -

#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()

Produzione

Allo stesso modo, al image.filter() puoi passare uno qualsiasi dei seguenti parametri per ottenere i rispettivi output:

  • CONTOUR

  • DETAIL

  • EDGE_ENHANCE

  • EDGE_ENHANCE_MORE

  • EMBOSS

  • FIND_EDGES

  • SMOOTH

  • SMOOTH_MORE

  • SHARPEN

Metodo Python img.filter (CONTOUR)

Il seguente esempio di Python applica il filtro CONTOUR all'immagine data.

Esempio

#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()

Produzione

Se si salva il programma sopra e lo si esegue, mostra l'immagine originale e l'immagine filtrata utilizzando l'utilità di visualizzazione PNG standard, come segue:

Original image

Filtered image

Metodo Python img.filter (DETAIL)

Il seguente esempio di Python applica il filtro DETTAGLI all'immagine data.

Esempio

#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()

Produzione

Se salvi il programma sopra e lo esegui, mostra l'immagine originale e l'immagine filtrata utilizzando l'utilità di visualizzazione PNG standard, come segue:

Original image

Filtered image

Metodo Python img.filter (EDGE_ENHANCE)

Il seguente esempio di Python applica il filtro EDGE_ENHANCE all'immagine data -

Esempio

#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()

Produzione

Se salvi il programma sopra e lo esegui, mostra l'immagine originale e l'immagine filtrata utilizzando l'utilità di visualizzazione PNG standard, come segue:

Original image

Filtered image

Metodo Python img.filter (EDGE_ENHANCE_MORE)

Il seguente esempio di Python applica il filtro EDGE_ENHANCE_MORE all'immagine data.

Esempio

#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()

Produzione

Se salvi il programma sopra e lo esegui, mostra l'immagine originale e l'immagine filtrata utilizzando l'utilità di visualizzazione PNG standard, come segue:

Original image

Filtered image

Metodo Python img.filter (EMBOSS)

Il seguente esempio di Python applica il filtro EMBOSS all'immagine data.

Esempio

#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()

Produzione

Se si salva il programma sopra e lo si esegue, mostra l'immagine originale e l'immagine filtrata utilizzando l'utilità di visualizzazione PNG standard, come segue:

Original image

Filtered image

Metodo Python img.filter (FIND_EDGES)

Il seguente esempio di Python applica il filtro FIND_EDGES all'immagine data.

Esempio

#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()

Produzione

Se si salva il programma sopra e lo si esegue, mostra l'immagine originale e l'immagine filtrata utilizzando l'utilità di visualizzazione PNG standard, come segue:

Original image

Filtered image

Metodo Python img.filter (SMOOTH)

Il seguente esempio di Python applica il filtro SMOOTH all'immagine data.

Esempio

#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()

Produzione

Se si salva il programma sopra e lo si esegue, mostra l'immagine originale e l'immagine filtrata utilizzando l'utilità di visualizzazione PNG standard, come segue:

Original image

Filtered image

Metodo Python img.filter (SHARPEN)

Il seguente esempio di Python applica il filtro SHARPEN all'immagine data.

Esempio

#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()

Produzione

Se si salva il programma sopra e lo si esegue, mostra l'immagine originale e l'immagine filtrata utilizzando l'utilità di visualizzazione PNG standard, come segue:

Original image

Filtered image

Il seguente esempio di Python applica il filtro SHARPEN all'immagine data.

Esempio

#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()

Produzione

Se si salva il programma sopra e lo si esegue, mostra l'immagine originale e l'immagine filtrata utilizzando l'utilità di visualizzazione PNG standard, come segue:

Original image

Filtered image

Il ImageColor Il modulo contiene colori in diversi formati disposti in tabelle e contiene anche convertitori da identificatori di colore in stile CSS3 a tuple RGB.

Nomi dei colori

Il modulo ImageColor supporta i seguenti formati di stringhe:

  • Indicatori di colore esadecimali, dati come #rgb o #rrggbb. Ad esempio, # 00ff00 rappresenta il verde puro.

  • # 00ff00 colore esadecimale, il valore rosso è 0 (0% rosso), il valore verde è 255 (100% verde) e il valore blu del suo RGB è 0 (0% blu).

  • Cilindrico: rappresentazioni delle coordinate (denominate anche HSL) del colore # 00ff00 tonalità: 0,33, saturazione: 1,00 e anche il valore di luminosità di 00ff00 è 0,50.

  • Il modulo Colore immagine fornisce circa 140 nomi di colori standard, basati sui colori supportati dal sistema X Window e dalla maggior parte dei browser web. I nomi dei colori non fanno distinzione tra maiuscole e minuscole.

Metodo ImageColor.getrgb ()

Converte una stringa di colore in una tupla RGB. Se la stringa non può essere analizzata, viene sollevata un'eccezione ValueError da questa funzione.

Sintassi

PIL.ImageColor.getrgb(color)

Dove,

  • Argomenti: color - Una stringa di colore

  • Valore restituito: (rosso, verde, blu [, alfa])

Esempio 1

from PIL import ImageColor

# using getrgb
img = ImageColor.getrgb("blue")
print(img)

img1 = ImageColor.getrgb("purple")
print(img1)

Produzione

(0, 0, 255)
(128, 0, 128)

Esempio 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()

Produzione

ImageColor. Metodo getcolor ()

Questo metodo è lo stesso di getrgb (), tuttavia, converte il valore RGB in un valore in scala di grigi, se la modalità non lo è. I comandi grafici supportano il disegno della forma e il colore dell'annotazione del testo o un'immagine della tavolozza. Se la stringa non può essere analizzata, questa funzione solleva un'eccezione ValueError.

Sintassi

PIL.ImageColor.getcolor(color, mode)

Dove,

  • Argomenti: una stringa di colore

  • Valore restituito - (livello di livello [, alfa]) o (rosso, verde, blu [, alfa])

Esempio

#Import required image modules
from PIL import Image,ImageColor

# using getrgb

img = ImageColor.getrgb("skyblue")
print(img)

img1 = ImageColor.getrgb("purple")
print(img1)

Produzione

(135, 206, 235)
(128, 0, 128)

Il ‘ImageDraw’fornisce un semplice supporto grafico 2D per Image Object. In generale, utilizziamo questo modulo per creare nuove immagini, annotare o ritoccare immagini esistenti e per generare grafici al volo per uso web.

I comandi grafici supportano il disegno di forme e l'annotazione del testo.

  • Un'immagine può essere ben pensata per essere una matrice bidimensionale di pixel (elementi dell'immagine). Un pixel è il punto di colore più piccolo supportato.

  • L'origine del sistema di coordinate bidimensionale utilizzato da ImageDraw è in upper left corner dell'immagine.

  • La combinazione di colori dei cuscini che utilizziamo è RGB. La rappresentazione e il supporto del colore RGB è fornito dal moduloImageColor.

  • bitmap, OpenType o TrueType sono i caratteri accettabili per le annotazioni di testo.

  • La maggior parte dei comandi di disegno può richiedere un parametro del riquadro di delimitazione che specifica l'area dell'immagine a cui deve essere applicato il comando.

  • Una sequenza di coordinate può essere rappresentata come [(x0, y0), (x1, y1),… (xn, yn)].

  • Per alcuni comandi di disegno, richiediamo valori angolari.

Esempio

Il seguente esempio di Python traccia una linea attraverso l'immagine data -

#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()

Produzione

Se salvi il programma sopra come Example.py ed esegui, disegna una linea sull'immagine e la visualizza utilizzando l'utilità di visualizzazione PNG standard, come segue:

Tela

  • Un ImageDraw è una superficie disegnabile Pillow (cioè una tela) di un'immagine.

  • ImageDraw.Draw (img) restituisce una rappresentazione su tela disegnabile del parametro Image img. Lo sfondo della tela è l'immagine "img".

Esempio

L'esempio seguente di Python disegna il testo sull'immagine data -

#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()

Produzione

Disegnare forme utilizzando il modulo "ImageDraw"

Il modulo ImageDraw ci consente di creare forme diverse creando prima un oggetto di disegno con l'immagine con cui vuoi lavorare e poi applicandolo. Alcune delle forme comuni che possiamo disegnare usando il modulo 'ImageDraw' sono le seguenti:

Linea

Di seguito è riportata la sintassi per disegnare una linea usando il cuscino in pitone -

draw.line(xy, fill=None, width=0)

Il line()Il metodo disegna una linea dall'angolo superiore sinistro a quello inferiore destro del riquadro di delimitazione xy e della tela. La linea viene riempita utilizzando il riempimento colore. I valori predefiniti di Nessuno e 0 rispettivamente sono per i parametri riempimento e larghezza che sono opzionali.

Esempio

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()

Produzione

Eclisse

Di seguito è riportata la sintassi per disegnare un'ellisse usando il cuscino Python -

draw.ellipse(xy, fill=None, outline=None)

Il ellipse()Il metodo disegna l'ellisse circondata dal riquadro di delimitazione xy durante il disegno. La forma viene riempita utilizzando il riempimento colore e il perimetro nel contorno colorato. I valori predefiniti di Nessuno sono per i parametri riempimento e larghezza che sono opzionali.

Esempio

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()

Produzione

Rettangolo

Di seguito è riportata la sintassi per disegnare un rettangolo usando il cuscino python -

draw.rectangle(xy, fill=None, outline=None)

Il rectangle()Il metodo disegna il rettangolo dato il riquadro di delimitazione xy durante il disegno. La forma viene riempita utilizzando il riempimento colore e il perimetro nel contorno colorato. I valori predefiniti di Nessuno sono per i parametri riempimento e larghezza che sono opzionali.

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()

Produzione

Poligono

Di seguito è riportata la sintassi per disegnare un rettangolo usando il cuscino python -

draw.polygon(seq, fill=None, outline=None)

Il polygon()Il metodo disegna un poligono che collega con linee rette le posizioni della sequenza di coordinate seq durante il disegno. Anche la prima e l'ultima coordinata in seq sono collegate da una linea retta. La forma viene riempita utilizzando il riempimento colore e il perimetro nel contorno colorato. I parametri riempimento e contorno sono opzionali con i valori predefiniti Nessuno.

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()

Produzione

La Python Imaging Library (PIL) contiene un supporto di base per le sequenze di immagini (formati di animazione). FLI / FLC, GIF e alcuni formati sperimentali sono i formati di sequenza supportati. Anche i file TIFF possono contenere più di un frame.

Aprendo un file di sequenza, PIL carica automaticamente il primo fotogramma della sequenza. Per spostarti tra diversi fotogrammi, puoi utilizzare i metodi cerca e racconta.

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

Produzione

raise EOFError
EOFError

Come possiamo vedere sopra, otterrai un'eccezione EOFError al termine della sequenza.

La maggior parte dei driver nell'ultima versione della libreria consente solo di cercare il frame successivo (come nell'esempio sopra), per riavvolgere il file potrebbe essere necessario riaprirlo.

Una classe iteratore di sequenza

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...

Puoi scrivere testo sulle immagini passando la posizione del testo, il testo stesso e il colore del testo. Possiamo passare più altri parametri a questo metodo.

Esempio

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")

Ingresso

Produzione

Se salvi il programma sopra come Example.py ed esegui, aggiungerà il testo dato su di esso e lo visualizzerà utilizzando l'utilità di visualizzazione PNG standard, come segue:

Selezione del carattere

Esistono numerosi modi per selezionare il carattere utilizzato per scrivere sull'immagine. Possiamo caricare i font direttamente dal sistema passando il percorso completo alla funzione, oppure possiamo usare ImageFont per caricare un font TrueType.

Esempio

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")

Produzione

In questo capitolo, usiamo numpy per memorizzare e manipolare i dati dell'immagine usando la libreria di immagini Python - "pillow".

Prima di procedere con questo capitolo, apri il prompt dei comandi in modalità amministratore ed esegui il seguente comando per installare numpy -

pip install numpy

Note - Funziona solo se hai PIP installato e aggiornato.

Creazione di un'immagine da Numpy Array

Creare un'immagine RGB usando PIL e salvarla come file jpg. Nel seguente esempio faremo:

  • Crea un array di 150 x 250 pixel.

  • Riempi di arancione la metà sinistra della matrice.

  • Riempi la metà destra della matrice con il blu.

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")

Produzione

Creazione di immagini in scala di grigi

La creazione di immagini in scala di grigi è leggermente diversa dalla creazione di un'immagine RGB. Possiamo usare l'array bidimensionale per creare un'immagine in scala di grigi.

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')

Produzione

Creazione di un array numpy da un'immagine

Puoi convertire l'immagine PIL in un array numpy e viceversa. Di seguito è riportato un piccolo programma per dimostrare lo stesso.

Esempio

#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")

Produzione

Se salvi il programma sopra come Example.py ed esegui -

  • Visualizza l'immagine originale.

  • Visualizza l'array recuperato da esso.

  • Converte nuovamente la matrice in immagine e la visualizza.

  • Poiché abbiamo utilizzato il metodo show (), le immagini vengono visualizzate utilizzando l'utilità di visualizzazione PNG predefinita, come 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