Skip to content

Comporre due immagini in base a una maschera con Python, Pillow

Python

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)

lena

razzo

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)

Pitone Cuscino in composito solido

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)

Maschera circolare composita Cuscino in Pitone

Cuscino in Pitone Cerchio composito

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)

Maschera di sfocatura del cerchio composito Cuscino in pitone

Sfocatura del cerchio composito Cuscino in pitone

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

Cavallo maschera composita Cuscino in pitone

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)

Python Cuscino cavallo composito

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)

Maschera di gradazione composita Cuscino in Pitone

Gradazione composita Cuscino Pitone