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