
Il modulo Image della libreria di elaborazione delle immagini Pillow (PIL) di Python fornisce composite() per la composizione di due immagini secondo un’immagine maschera.
In questo articolo vengono descritti i seguenti contenuti.
- Parametri di Image.composite()
- Codice di esempio di Image.composite()
- Componi l’intera area con un rapporto costante
- Crea l’immagine della maschera disegnando
- Usa l’immagine esistente come immagine maschera
Fare riferimento al seguente articolo per l’installazione e l’utilizzo di base di Pillow (PIL).
Si noti che composite() è una funzione per comporre due immagini della stessa dimensione. Usa paste() per comporre immagini di dimensioni diverse. paste() ti consenti di mascherare una piccola immagine e incollarla ovunque sull’immagine grande.
La composizione dell’immagine è possibile con OpenCV e NumPy invece di Pillow. Vedi l’articolo qui sotto.
Parametri di Image.composite()
Ci sono tre parametri per composite(). Tutti e tre devono essere oggetti Immagine, tutti della stessa dimensione.
immagine1, immagine2
Due immagini da comporre.
maschera
Immagine della maschera.
la modalità deve essere uno dei tre tipi seguenti.
- Immagine 1: 1 bit (immagine binaria)
- L: immagine in scala di grigi a 8 bit
- RGBA: immagine con canale alfa
image1 e image2 sono miscelati alfa in base al valore di mask.
# For 1bit
result = mask * image1 + (1 - mask) * image2
# For 8bit
result = mask / 255 * image1 + (1 - mask / 255 ) * image2
Codice di esempio di Image.composite()
Importa immagine da PIL e carica immagini.
ImageDraw e ImageFilter vengono utilizzati quando si disegna una figura e si crea un’immagine maschera. Quando si legge un file immagine e lo si utilizza come immagine maschera, possono essere omessi.
from PIL import Image, ImageDraw, ImageFilter
im1 = Image.open('data/src/lena.jpg')
im2 = Image.open('data/src/rocket.jpg').resize(im1.size)


Questa volta, la seconda immagine viene ridotta di resize() in modo che corrisponda alle dimensioni. Se tagli una parte dell’immagine e ne regoli le dimensioni, usa crop(). Vedi il seguente articolo.
Componi l’intera area con un rapporto costante
Quando un’immagine solida viene utilizzata come immagine maschera, l’intera immagine viene composta con un rapporto costante.
Ad esempio, crea un’immagine solida con un valore di 128 con Image.new() e usala come immagine maschera.
mask = Image.new("L", im1.size, 128)
im = Image.composite(im1, im2, mask)
# im = Image.blend(im1, im2, 0.5)

blend() può anche comporre l’intera superficie con un rapporto costante. Specificare una costante da 0,0 a 1,0 come parametro alpha anziché mask.
Crea l’immagine della maschera disegnando
Se vuoi mascherare e comporre con una forma semplice, come un cerchio e un rettangolo, è conveniente disegnare con il modulo ImageDraw. Per i dettagli sul disegno, vedere il seguente articolo. Puoi anche disegnare poligoni.
Disegna un cerchio bianco su sfondo nero per creare un’immagine maschera.
mask = Image.new("L", im1.size, 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((140, 50, 260, 170), fill=255)
im = Image.composite(im1, im2, mask)


I contorni possono essere composti senza problemi sfocando l’immagine della maschera con ImageFilter.
mask_blur = mask.filter(ImageFilter.GaussianBlur(10))
im = Image.composite(im1, im2, mask_blur)


Usa l’immagine esistente come immagine maschera
Un’immagine esistente può essere letta e utilizzata come immagine maschera da comporre in una forma complessa.
Prova a utilizzare un’immagine a forma di cavallo in bianco e nero (campione di immagine scikit: skimage.data.horse() ).

Dopo che l’immagine è stata letta da open(), viene adattata alla dimensione dell’immagine incollata da resize() e la modalità viene convertita in ‘L’ (scala di grigi) da convert().
mask = Image.open('data/src/horse.png').convert('L').resize(im1.size)
im = Image.composite(im1, im2, mask)

Se si desidera invertire il bianco e nero dell’immagine della maschera, fare riferimento al seguente articolo.
Un altro esempio:
È composto per cambiare gradualmente con l’immagine di generazione generata usando NumPy.
mask = Image.open('data/src/gradation_h.jpg').convert('L').resize(im1.size)
im = Image.composite(im1, im2, mask)


