Skip to content

Zwei Bilder entsprechend einer Bildmaske mit Python zusammensetzen, Pillow

Python

Das Image-Modul der Bildverarbeitungsbibliothek Pillow (PIL) von Python bietet composite() zum Zusammensetzen von zweier Bilder gemäß einem Maskenbild.

Dieser Artikel hat folgenden Inhalt.

  • Parameter von Image.composite()
  • Beispielcode von Image.composite()
    • Setzen Sie den gesamten Bereich in einem konstanten Verhältnis zusammen
    • Maskenbild durch Zeichnen erstellen
    • Vorhandenes Bild als Maskenbild verwenden

Informationen zur Installation und einfachen Verwendung von Pillow (PIL) finden Sie im following Artikel.

Beachten Sie, dass composite() eine Funktion ist, um zwei Bilder gleicher Größe zusammenzusetzen. Verwenden Sie Paste(), um Bilder unterschiedlicher Größe zusammenzusetzen. paste() ermöglicht es Ihnen, ein kleines Bild zu maskieren und es irgendwo auf dem großen Bild einzufügen.

Bildkomposition ist mit OpenCV und NumPy statt Pillow möglich. Siehe den Artikel unten.

Parameter von Image.composite()

Es gibt drei Parameter für composite(). Alle drei müssen Bildobjekte sein, sterben alle dieselbe Größe haben.

Bild1, Bild2

Zwei Bilder zum Zusammensetzen.

Maske

Maskenbild.

Modus muss einer der folgenden drei Typen sein.

  • 1: 1-Bit-Bild (Binärbild)
  • L: 8-Bit-Graustufenbild
  • RGBA: Bild mit Alphakanal

image1 und image2 werden entsprechend dem Wert von mask alpha-gemischt.

# For 1bit
result = mask * image1 + (1 - mask) * image2

# For 8bit
result = mask / 255 * image1 + (1 - mask / 255 ) * image2

Beispielcode von Image.composite()

Bild aus PIL importieren und Bilder laden.

ImageDraw und ImageFilter werden beim Zeichnen einer Figur und beim Erstellen eines Maskenbildes verwendet. Wenn Sie eine Bilddatei lesen und als Maskenbild verwenden, können Sie weggelassen werden.

from PIL import Image, ImageDraw, ImageFilter

im1 = Image.open('data/src/lena.jpg')
im2 = Image.open('data/src/rocket.jpg').resize(im1.size)

Lena

Rakete

Diesmal wird das zweite Bild durch resize() auf die Größe verkleinert. Wenn SIE einen Teil des Bildes ausschneiden und die Größe anpassen, verwenden Sie crop(). Siehe folgenden Artikel.

Setzen Sie den gesamten Bereich in einem konstanten Verhältnis zusammen

Wenn ein festes Bild als Maskenbild verwendet wird, wird das gesamte Bild in einem konstanten Verhältnis zusammengesetzt.

Erstellen Sie beispielsweise mit Image.new() ein solides Bild mit dem Wert 128 und verwenden Sie es als Maskenbild.

mask = Image.new("L", im1.size, 128)
im = Image.composite(im1, im2, mask)
# im = Image.blend(im1, im2, 0.5)

Python-Kissenverbundstoff fest

Die Methode blend() kann auch die gesamte Oberfläche in einem konstanten Verhältnis zusammensetzen. Geben Sie als Parameter alpha anstelle von mask eine Konstante von 0,0 bis 1,0 an.

Maskenbild durch Zeichnen erstellen

Wenn Sie eine einfache Form wie Kreis und Rechteck maskieren und zusammensetzen möchten, ist das Zeichnen mit dem ImageDraw-Modul praktisch. Notebooks zum Zeichnen finden Sie im following Artikel. Sie können auch Polygone zeichnen.

Zeichnen Sie einen weißen Kreis auf schwarzem Hintergrund, um ein Maskenbild zu erstellen.

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)

Zusammengesetzte Kreismaske aus Python-Kissen

Zusammengesetzter Kreis des Python-Kissens

Die Grenzen können glatt zusammengesetzt werden, ohne dass das Maskenbild mit ImageFilter verwischt wird.

mask_blur = mask.filter(ImageFilter.GaussianBlur(10))
im = Image.composite(im1, im2, mask_blur)

Zusammengesetzte Kreisunschärfemaske aus Python-Kissen

Zusammengesetzter Kreisunschärfe des Python-Kissens

Vorhandenes Bild als Maskenbild verwenden

Ein vorhandenes Bild kann gelesen und als Maskenbild verwendet werden, um es in einer komplexen Form zusammenzusetzen.

Erhalten Sie es mit einem schwarz-weißen Bild in Form eines Pferdes (scikit-image sample: skimage.data.horse() ).

Python Kissen zusammengesetzte Maske Pferd

Nachdem das Bild von open() gelesen wurde, wird es von resize() an die Größe des eingefügten Bildes angepasst und der Modus von convert() auf ‚L‘ (Graustufen) konvertiert.

mask = Image.open('data/src/horse.png').convert('L').resize(im1.size)
im = Image.composite(im1, im2, mask)

Python Kissen Komposit-Pferd

Wenn Sie das Schwarzweiß des Maskenbildes umkehren möchten, lesen Sie bitte den folgenden Artikel.

Ein anderes Beispiel:

Es wird so zusammengesetzt, dass es sich mit dem mit NumPy generierten Gradationsbild ändert.

mask = Image.open('data/src/gradation_h.jpg').convert('L').resize(im1.size)
im = Image.composite(im1, im2, mask)

Zusammengesetzte Gradationsmaske Python Kissen

Zusammengesetzte Abstufung von Python Pillow