Python-Kissen - Kurzanleitung
In der heutigen digitalen Welt stoßen wir auf viele digitale Bilder. Falls wir mit der Programmiersprache Python arbeiten, bietet sie viele Bildverarbeitungsbibliotheken, um digitalen Bildern Bildverarbeitungsfunktionen hinzuzufügen.
Einige der häufigsten Bildverarbeitungsbibliotheken sind: OpenCV, Python Imaging Library (PIL), Scikit-Bild, Kissen. In diesem Tutorial konzentrieren wir uns jedoch nur aufPillow module und wird versuchen, verschiedene Funktionen dieses Moduls zu erkunden.
Pillow basiert auf PIL (Python Image Library). PIL ist eines der wichtigsten Module für die Bildverarbeitung in Python. Das PIL-Modul wird jedoch seit 2011 nicht mehr unterstützt und unterstützt Python 3 nicht.
Das Pillow-Modul bietet mehr Funktionen, läuft auf allen gängigen Betriebssystemen und unterstützt Python 3. Es unterstützt eine Vielzahl von Bildern wie "jpeg", "png", "bmp", "gif", "ppm", "tiff". Mit dem Kissenmodul können Sie fast alles auf digitalen Bildern machen. Abgesehen von grundlegenden Bildverarbeitungsfunktionen, einschließlich Punktoperationen, Filtern von Bildern mithilfe integrierter Faltungskerne und Farbraumkonvertierungen.
Bildarchiv
Die Python Imaging Library eignet sich am besten für Bildarchivierungs- und Stapelverarbeitungsanwendungen. Das Python-Kissenpaket kann zum Erstellen von Miniaturansichten, zum Konvertieren von einem Format in ein anderes und zum Drucken von Bildern usw. verwendet werden.
Bildschirm
Sie können Bilder mit der Tk PhotoImage-, BitmapImage- und Windows DIB-Oberfläche anzeigen, die mit PythonWin und anderen Windows-basierten Toolkits sowie vielen anderen GUI-Toolkits (Graphical User Interface) verwendet werden kann.
Für Debugging-Zwecke gibt es eine show () -Methode zum Speichern des Images auf der Festplatte, die das Dienstprogramm für die externe Anzeige aufruft.
Bildverarbeitung
Die Kissenbibliothek enthält alle grundlegenden Bildverarbeitungsfunktionen. Sie können die Größe von Bildern ändern, drehen und transformieren.
Mit dem Kissenmodul können Sie mithilfe der Histogrammmethode einige Statistikdaten aus dem Bild ziehen, die später für statistische Analysen und die automatische Kontrastverbesserung verwendet werden können.
In diesem Kapitel wird erläutert, wie Sie das Kissenpaket auf Ihrem Computer installieren.
Die Installation des Kissenpakets ist sehr einfach, insbesondere wenn Sie es mit pip installieren.
Kissen mit Pip installieren
Um das Kissen mit pip zu installieren, führen Sie einfach den folgenden Befehl in Ihrer Eingabeaufforderung aus:
python -m pip install pip
python -m pip install pillow
Falls Pip und Kissen bereits in Ihrem Computer installiert sind, wird in den obigen Befehlen lediglich das 'requirement already satisfied'wie unten gezeigt -
Um das Bild anzuzeigen, verwendet die Kissenbibliothek eine Bildklasse. Das Bildmodul im Kissenpaket enthält einige wichtige integrierte Funktionen wie das Laden von Bildern oder das Erstellen neuer Bilder usw.
Öffnen, Drehen und Anzeigen eines Bildes
Um das Bild zu laden, importieren wir einfach das Bildmodul aus dem Kissen und rufen das auf Image.open()Übergeben des Bilddateinamens.
Anstatt das Pillow-Modul aufzurufen, rufen wir das PIL-Modul auf, um es abwärtskompatibel mit einem älteren Modul namens Python Imaging Library (PIL) zu machen. Deshalb beginnt unser Code mit“from PIL import Image” Anstatt von “from Pillow import Image”.
Als nächstes laden wir das Bild, indem wir das aufrufen Image.open() function, der einen Wert vom Datentyp Image-Objekt zurückgibt. Jede Änderung, die wir am Bildobjekt vornehmen, kann mit dem in einer Bilddatei gespeichert werdensave()Methode. Das Bildobjekt, das wir mit erhalten habenImage.open()kann später verwendet werden, um die Größe dieses Bildobjekts zu ändern, zuzuschneiden, zu zeichnen oder andere Bildbearbeitungsmethoden aufzurufen.
Beispiel
Das folgende Beispiel zeigt die Drehung eines Bildes mit einem Python-Kissen -
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()
Ausgabe
Wenn Sie das obige Programm als Example.py speichern und ausführen, werden die ursprünglichen und gedrehten Bilder mit dem Standard-PNG-Anzeigeprogramm wie folgt angezeigt:
Actual image
Rotated image (45 degrees)
Attribute des Bildmoduls
Die Instanz der Image-Klasse weist einige Attribute auf. Lassen Sie uns versuchen, einige von ihnen anhand eines Beispiels zu verstehen -
Image.filename
Diese Funktion wird verwendet, um den Dateinamen oder den Pfad des Bildes abzurufen.
>>>image = Image.open('beach1.jpg')
>>> image.filename
'beach1.jpg'
Bildformat
Diese Funktion gibt das Dateiformat der Bilddatei wie 'JPEG', 'BMP', 'PNG' usw. zurück.
>>> image = Image.open('beach1.jpg')
>>>
>>> image.format
'JPEG'
Image.mode
Es wird verwendet, um das vom Bild verwendete Pixelformat abzurufen. Typische Werte sind "1", "L", "RGB" oder "CMYK".
>>> image.mode
'RGB'
Bildgröße
Es gibt das Tupel zurück, das aus Größe und Gewicht des Bildes besteht.
>>> image.size
(1280, 721)
Bild breite
Es wird nur die Breite des Bildes zurückgegeben.
>>> image.width
1280
Bildhöhe
Es wird nur die Höhe des Bildes zurückgegeben.
>>> image.height
721
Image.info
Es gibt ein Wörterbuch zurück, das Daten enthält, die dem Bild zugeordnet sind.
>>> 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
Es gibt die Farbpalettentabelle zurück, falls vorhanden.
>>> image.palette
Output above - Keine
In diesem Kapitel werden Themen behandelt, darunter das Lesen und Speichern eines Bildes in Pillow.
Ein Bild lesen
Das Lesen und Schreiben von Bildern mithilfe der Kissenbibliothek ist mit Hilfe von sehr einfach PIL.Image module function.
Syntax
Image.open(fp, mode=’r’)
Wo
fp- Ein Dateiname (Zeichenfolge), ein pathlib.Path-Objekt oder ein Dateiobjekt. Das Dateiobjekt muss die Methoden read (), seek () und tell () implementieren und im Binärmodus geöffnet werden.
mode - Es ist ein optionales Argument, falls angegeben, muss 'r' sein.
Return value - Ein Bildobjekt.
Error - Wenn die Datei nicht gefunden werden kann oder das Bild nicht geöffnet und identifiziert werden kann.
Beispiel
Das Folgende ist ein sehr einfaches Beispiel, in dem wir ein Bild eines beliebigen Formats öffnen (das wir verwenden).jpg), zeigen Sie es in einem Fenster an und speichern Sie es (Standardspeicherort) in einem anderen Dateiformat (.png).
from PIL import Image
image = Image.open('beach1.jpg')
image.show()
image.save('beach1.bmp')
image1 = Image.open('beach1.bmp')
image1.show()
Im obigen Beispiel importieren wir das Image-Modul aus der PIL-Bibliothek und rufen dann das auf Image.open()Funktion zum Lesen eines Bildes von der Festplatte, die einen Bildobjektdatentyp zurückgibt. Der Dateityp wird automatisch anhand des Dateiinhalts ermittelt. Zum Lesen dieopen() Funktion akzeptiert a filename(string), ein path object oder ein image(file) Objekt.
Mit der open () -Funktion lesen wir also tatsächlich das Bild. Image.open () liest das Bild und erhält alle relevanten Informationen aus dem Bild.
Ausgabe
Wenn Sie das obige Programm als Example.py speichern und ausführen, werden die Originalbilder (.jpg) und erneut gespeicherten Bilder (.bmp) mit dem Standard-PNG-Anzeigeprogramm wie folgt angezeigt:
Actual image
Resaved image (.bmp)
Ein Bild speichern
Die Funktion save () schreibt ein Bild in eine Datei. Wie beim Lesen (Funktion open ()) akzeptiert die Funktion save () einen Dateinamen, ein Pfadobjekt oder ein Dateiobjekt, das zum Schreiben geöffnet wurde.
Syntax
Image.save(fp, format=None, **params)
Wo,
fp - Ein Dateiname (Zeichenfolge), ein pathlib.Path-Objekt oder ein Dateiobjekt.
format- Optionale Formatüberschreibung. Wenn nicht angegeben, wird das zu verwendende Format aus der Dateinamenerweiterung bestimmt. Wenn ein Dateiobjekt anstelle eines Dateinamens verwendet wurde, sollte dieser Parameter immer verwendet werden.
options - Zusätzliche Parameter für den Bildschreiber.
Return value - Keine
KeyError - Wenn das Ausgabeformat nicht aus dem Dateinamen ermittelt werden konnte, verwenden Sie die Formatoption, um dies zu beheben.
IOError - Wenn die Datei nicht geschrieben werden konnte, wurde sie möglicherweise erstellt und enthält möglicherweise Teildaten.
Kurz gesagt, die obige Syntax speichert das Bild unter dem angegebenen Dateinamen. Wenn kein Format angegeben ist, basiert es auf der aktuellen Dateinamenerweiterung. Um dem Verfasser die zusätzlichen Anweisungen bereitzustellen, verwenden wir Schlüsselwortoptionen.
image.save('beach1.bmp')
Im obigen Beispiel wird die Datei basierend auf der Dateierweiterung gespeichert, um beispielsweise den Bildtyp zu bestimmen. Mit dem obigen Beispiel wird eine BMP-Datei in unserem aktuellen Arbeitsverzeichnis erstellt.
Sie können den Dateityp auch explizit als zweiten Parameter angeben -
image.save('beach1.gif', 'GIF')
Manchmal müssen alle Bilder gleich hoch und breit sein. Eine Möglichkeit, dies zu erreichen, besteht darin, mit der Funktion thumbnail () aus der Kissenbibliothek ein Miniaturbild aller Bilder zu erstellen.
Diese Methode ändert das Bild so, dass es eine Miniaturversion von sich selbst enthält, und die Größe des Bildes ist nicht größer als die angegebene Größe.
Die Methode berechnet eine geeignete Miniaturbildgröße, um den Aspekt des Bildes beizubehalten draft () method um den Dateireader zu konfigurieren (falls zutreffend) und schließlich die Größe des Bildes zu ändern.
Syntax
Image.thumbnail(size, resample=3)
Wo,
Size - Erforderliche Größe
Resample- Optionaler Resampling-Filter. Dies kann eines dieser PIL.Image.NEAREST, PIL.Image.BILINEAR, PIL.Image.BICUBIC oder PIL.Image.LANCZOS sein. Wenn nicht angegeben, wird standardmäßig PIL.Image.BICUBIC verwendet.
Returns - Keine
Beispiel
Das folgende Beispiel zeigt die Erstellung eines Miniaturbilds mit Python-Kissen -
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()
Ausgabe
Wenn Sie das obige Programm als Example.py speichern und ausführen, wird das erstellte Miniaturbild mit dem Standard-PNG-Anzeigeprogramm wie folgt angezeigt:
Original image
Output image
Mit dem Kissenpaket können Sie ein Bild auf ein anderes einfügen. Die Funktion merge () akzeptiert einen Modus und ein Tupel von Bildern als Parameter und kombiniert sie zu einem einzigen Bild.
Syntax
Image.merge(mode, bands)
Wo,
mode - Der für das Ausgabebild zu verwendende Modus.
bands - Eine Sequenz, die ein Einzelbandbild für jedes Band im Ausgabebild enthält. Alle Bänder müssen die gleiche Größe haben.
Return value - Ein Bildobjekt.
Mit der Funktion merge () können Sie die RGB-Bänder eines Bildes wie folgt zusammenführen:
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()
Wenn Sie den obigen Code ausführen, sehen Sie das Originalbild und das Bild mit dem Zusammenführen der RGB-Bänder wie unten gezeigt -
Bild eingeben
Ausgabebild
Zwei Bilder zusammenführen
Um zwei verschiedene Bilder zusammenzuführen, müssen Sie auf die gleiche Weise:
Erstellen Sie mit der Funktion open () ein Bildobjekt für die erforderlichen Bilder.
Beim Zusammenführen von zwei Bildern müssen Sie sicherstellen, dass beide Bilder dieselbe Größe haben. Holen Sie sich daher jede Größe beider Bilder und ändern Sie gegebenenfalls die Größe entsprechend.
Erstellen Sie mit der Funktion Image.new () ein leeres Bild.
Fügen Sie die Bilder mit der Funktion paste () ein.
Speichern und zeigen Sie das resultierende Bild mit den Funktionen save () und show () an.
Beispiel
Das folgende Beispiel zeigt das Zusammenführen von zwei Bildern mit Python Pillow -
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()
Ausgabe
Wenn Sie das obige Programm als Example.py speichern und ausführen, werden die beiden Eingabebilder und das zusammengeführte Bild mit dem Standard-PNG-Anzeigeprogramm wie folgt angezeigt:
Eingabebild1
Eingabe image2
Zusammengeführtes Bild
Das Verwischen eines Bildes kann durch Verringern des Rauschpegels im Bild durch Anwenden eines Filters auf ein Bild erfolgen. Bildunschärfe ist einer der wichtigen Aspekte der Bildverarbeitung.
Das ImageFilter classIn der Kissenbibliothek finden Sie mehrere Standardbildfilter. Bildfilter können durch Aufrufen von auf ein Bild angewendet werdenfilter() method des Bildobjekts mit dem erforderlichen Filtertyp, wie in der ImageFilter-Klasse definiert.
Es gibt verschiedene Techniken, um Bilder zu verwischen, und wir werden die unten genannten Techniken diskutieren.
Einfache Unschärfe
Box Unschärfe
Gaußsche Unschärfe
Alle diese drei Techniken verwenden die Methode 'Image.filter ()', um den Filter auf Bilder anzuwenden.
Einfache Unschärfe
Es wendet einen Unschärfeeffekt auf das Bild an, wie durch einen bestimmten Kernel oder eine Faltungsmatrix angegeben.
Syntax
filter(ImageFilter.BLUR)
Beispiel
#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')
Beim Ausführen des obigen Beispiels werden die beiden Standardfenster des PNG-Anzeige-Dienstprogramms (in diesem Fall Fenster) generiert Photos App).
Original image
Blurred image
Box Unschärfe
In diesem Filter verwenden wir 'Radius' als Parameter. Der Radius ist direkt proportional zum Unschärfewert.
Syntax
ImageFilter.BoxBlur(radius)
Wo,
Radius - Größe der Box in eine Richtung.
Radius 0 - bedeutet keine Unschärfe und gibt das gleiche Bild zurück.
RRadius 1 & minnus; nimmt 1 Pixel in jede Richtung, dh insgesamt 9 Pixel.
Beispiel
#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')
Ausgabe
Beim Ausführen generiert das obige Beispiel die beiden Standardfenster des PNG-Anzeigeprogramms (in diesem Fall die Windows-Foto-App).
Original image
Blurred image
Gaußsche Unschärfe
Dieser Filter verwendet auch den Parameterradius und funktioniert mit einigen algorithmischen Änderungen genauso wie Box Blur. Kurz gesagt, wenn Sie den Radiuswert ändern, wird eine unterschiedliche Intensität der Gaußschen Unschärfebilder erzeugt.
Syntax
ImageFilter.GaussianBlur(radius=2)
Wo,
Radius - Unschärferadius
Beispiel
#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')
Ausgabe
Beim Ausführen des obigen Beispiels werden die beiden Standardfenster des PNG-Anzeige-Dienstprogramms (in diesem Fall Fenster) generiert Photos App).
Original image
Blurred image
Das Zuschneiden ist eine der wichtigen Operationen der Bildverarbeitung, um unerwünschte Teile eines Bildes zu entfernen und einem Bild die erforderlichen Funktionen hinzuzufügen. Es ist ein weit verbreitetes Verfahren in Webanwendungen zum Hochladen eines Bildes.
Für die Funktion crop () der Bildklasse in Pillow muss der Teil als Rechteck zugeschnitten werden. Der Rechteckbereich, der aus einem Bild zugeschnitten werden soll, wird als Tupel mit vier Elementen angegeben und gibt den Rechteckbereich des Bildes zurück, der als Bildobjekt zugeschnitten wurde.
Beispiel
Das folgende Beispiel zeigt, wie Sie ein Bild mit einem Python-Kissen drehen.
#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')
Ausgabe
Wenn Sie das obige Programm als Example.py speichern und ausführen, werden die Originalbilder und zugeschnittenen Bilder mit dem Standard-PNG-Anzeigeprogramm wie folgt angezeigt:
Original Bild
Beschnittenes Bild
Während Sie mit der Python-Bildverarbeitungsbibliothek an Bildern arbeiten, müssen Sie in einigen Fällen ein vorhandenes Bild umdrehen, um weitere Einblicke zu erhalten, seine Sichtbarkeit zu verbessern oder aufgrund Ihrer Anforderungen.
Das Bildmodul der Kissenbibliothek ermöglicht es uns, ein Bild sehr einfach umzudrehen. Wir werden die Transponierungsfunktion (Methode) aus dem Bildmodul verwenden, um die Bilder umzudrehen. Einige der am häufigsten verwendeten Methoden, die von 'transpose ()' unterstützt werden, sind -
Image.FLIP_LEFT_RIGHT - Zum horizontalen Spiegeln des Bildes
Image.FLIP_TOP_BOTTOM - Zum vertikalen Spiegeln des Bildes
Image.ROTATE_90 - Zum Drehen des Bildes durch Angabe des Grades
Beispiel 1: Horizontal gespiegeltes Bild
Das folgende Python-Beispiel liest ein Bild, dreht es horizontal und zeigt das Originalbild und das gespiegelte Bild mit dem Standard-PNG-Anzeigeprogramm an.
# 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()
Ausgabe
Original image
Flipped image
Beispiel 2: Vertikal gespiegeltes Bild
Das folgende Python-Beispiel liest ein Bild, dreht es vertikal und zeigt das Original und das gespiegelte Bild mit dem Standard-PNG-Anzeigeprogramm an.
# 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()
Ausgabe
Original Image
Flipped Image
Beispiel 3: Bild um einen bestimmten Grad drehen
Das folgende Python-Beispiel liest ein Bild, dreht sich bis zu einem bestimmten Grad und zeigt das ursprüngliche und das gedrehte Bild mit dem Standard-PNG-Anzeigeprogramm an.
# 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()
Ausgabe
Original Image
Rotated Image
Der größte Teil des digitalen Bildes ist eine zweidimensionale Pixelebene und hat eine Breite und Höhe. Das Bildmodul aus der Kissenbibliothek hat eine Attributgröße. Dieses Tupel besteht aus der Breite und Höhe des Bildes als seinen Elementen. Um die Größe eines Bildes zu ändern, rufen Sie die resize () -Methode der Bildklasse des Kissens auf, indem Sie Breite und Höhe angeben.
Ändern Sie die Größe und speichern Sie die Größe des Bildes
Das Programm zum Ändern der Größe und Speichern des verkleinerten Bildes ist unten angegeben -
#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')
Ausgabe
Wenn Sie das obige Programm als Example.py speichern und ausführen, werden die Originalbilder und Bilder in der Größe mit dem Standard-PNG-Anzeigeprogramm wie folgt angezeigt:
Original Image
Resized Image
Sie haben festgestellt, dass einige der Online-Fotos mit einem Wasserzeichen versehen sind. Wasserzeichen ist definitiv eine der besseren Möglichkeiten, um Ihre Bilder vor Missbrauch zu schützen. Es wird außerdem empfohlen, Ihren kreativen Fotos ein Wasserzeichen hinzuzufügen, bevor Sie sie in sozialen Medien teilen, um zu verhindern, dass sie missbraucht werden.
Wasserzeichen ist im Allgemeinen ein Text oder ein Logo auf dem Foto, das angibt, wer das Foto aufgenommen hat oder wem die Rechte an dem Foto gehören.
Mit dem Kissenpaket können wir Ihren Bildern Wasserzeichen hinzufügen. Um unserem Bild ein Wasserzeichen hinzuzufügen, benötigen wir“Image”, “ImageDraw” und “ImageFont” Module aus Kissenpaket.
Das Modul 'ImageDraw' bietet Funktionen zum Zeichnen von 2D-Grafiken auf neue oder vorhandene Bilder. Das Modul 'ImageFont' wird zum Laden von Bitmap-, TrueType- und OpenType-Schriftdateien verwendet.
Beispiel
Das folgende Python-Programm zeigt, wie Sie einem Bild mit Python Pillow ein Wasserzeichen hinzufügen -
#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')
Ausgabe
Angenommen, es folgt das Eingabebild boy.jpg befindet sich im Ordner Bild.
Wenn Sie nach dem Ausführen des obigen Programms den Ausgabeordner beobachten, sehen Sie die resultierende Datei watermark.jpg mit Wasserzeichen wie unten gezeigt -
Das ImageFilter moduleenthält Definitionen für einen vordefinierten Satz von Filtern, die wir mit der Image.filter () -Methode verwendet haben. Diese Filter werden verwendet, um das Erscheinungsbild des Bildes zu ändern.
Beispiel
Das folgende Beispiel ist das Filtern eines Bildes -
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()
Im obigen Programm haben wir das verwendet MinFilter()Methode, mit der ein Mindestfilter erstellt wird. Es wird der niedrigste Pixelwert in einem Fenster mit der angegebenen Größe ausgewählt.
ImageFilter.MinFilter(size=3)
Wo,
size - Die Kernelgröße in Pixel.
Ausgabe
Wenn Sie das obige Programm speichern und ausführen, werden das Originalbild, das unscharfe Bild und das unscharfe Bild mit MinFilter unter Verwendung des Standard-PNG-Anzeigeprogramms wie folgt angezeigt:
Original Image
Blurred Image
Image blurred with mini filter
Filter
Die aktuelle Version der Kissenbibliothek bietet die unten genannten vordefinierten Filter zur Bildverbesserung.
BLUR
CONTOUR
DETAIL
EDGE_ENHANCE
EDGE_ENHANCE_MORE
EMBOSS
FIND_EDGES
SHARPEN
SMOOTH
SMOOTH_MORE
Beispiel
Das folgende Python-Beispiel wendet den Unschärfefilter auf ein Bild an, speichert es und zeigt es mit dem Standard-PNG-Anzeigeprogramm an.
#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()
Ausgabe
In gleicher Weise zum image.filter() Methode können Sie einen der folgenden Parameter übergeben, um die entsprechenden Ausgaben zu erhalten -
CONTOUR
DETAIL
EDGE_ENHANCE
EDGE_ENHANCE_MORE
EMBOSS
FIND_EDGES
SMOOTH
SMOOTH_MORE
SHARPEN
Python img.filter (CONTOUR) Methode
Das folgende Python-Beispiel wendet den CONTOUR-Filter auf das angegebene Bild an.
Beispiel
#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()
Ausgabe
Wenn Sie das obige Programm speichern und ausführen, werden das Originalbild und das gefilterte Bild mit dem Standard-PNG-Anzeigeprogramm wie folgt angezeigt:
Original image
Filtered image
Python img.filter (DETAIL) Methode
Das folgende Python-Beispiel wendet den DETAIL-Filter auf das angegebene Bild an.
Beispiel
#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()
Ausgabe
Wenn Sie das obige Programm speichern und ausführen, werden das Originalbild und das gefilterte Bild mit dem Standard-PNG-Anzeigeprogramm wie folgt angezeigt:
Original image
Filtered image
Python img.filter (EDGE_ENHANCE) Methode
Das folgende Python-Beispiel wendet den EDGE_ENHANCE-Filter auf das angegebene Bild an -
Beispiel
#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()
Ausgabe
Wenn Sie das obige Programm speichern und ausführen, werden das Originalbild und das gefilterte Bild mit dem Standard-PNG-Anzeigeprogramm wie folgt angezeigt:
Original image
Filtered image
Python img.filter (EDGE_ENHANCE_MORE) Methode
Das folgende Python-Beispiel wendet den Filter EDGE_ENHANCE_MORE auf das angegebene Bild an.
Beispiel
#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()
Ausgabe
Wenn Sie das obige Programm speichern und ausführen, werden das Originalbild und das gefilterte Bild mit dem Standard-PNG-Anzeigeprogramm wie folgt angezeigt:
Original image
Filtered image
Python img.filter (EMBOSS) -Methode
Das folgende Python-Beispiel wendet den EMBOSS-Filter auf das angegebene Bild an.
Beispiel
#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()
Ausgabe
Wenn Sie das obige Programm speichern und ausführen, werden das Originalbild und das gefilterte Bild mit dem Standard-PNG-Anzeigeprogramm wie folgt angezeigt:
Original image
Filtered image
Python img.filter (FIND_EDGES) Methode
Das folgende Python-Beispiel wendet den Filter FIND_EDGES auf das angegebene Bild an.
Beispiel
#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()
Ausgabe
Wenn Sie das obige Programm speichern und ausführen, werden das Originalbild und das gefilterte Bild mit dem Standard-PNG-Anzeigeprogramm wie folgt angezeigt:
Original image
Filtered image
Python img.filter (SMOOTH) Methode
Das folgende Python-Beispiel wendet den SMOOTH-Filter auf das angegebene Bild an.
Beispiel
#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()
Ausgabe
Wenn Sie das obige Programm speichern und ausführen, werden das Originalbild und das gefilterte Bild mit dem Standard-PNG-Anzeigeprogramm wie folgt angezeigt:
Original image
Filtered image
Python img.filter (SHARPEN) Methode
Das folgende Python-Beispiel wendet den SHARPEN-Filter auf das angegebene Bild an.
Beispiel
#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()
Ausgabe
Wenn Sie das obige Programm speichern und ausführen, werden das Originalbild und das gefilterte Bild mit dem Standard-PNG-Anzeigeprogramm wie folgt angezeigt:
Original image
Filtered image
Das folgende Python-Beispiel wendet den SHARPEN-Filter auf das angegebene Bild an.
Beispiel
#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()
Ausgabe
Wenn Sie das obige Programm speichern und ausführen, werden das Originalbild und das gefilterte Bild mit dem Standard-PNG-Anzeigeprogramm wie folgt angezeigt:
Original image
Filtered image
Das ImageColor Das Modul enthält Farben in verschiedenen Formaten, die in Tabellen angeordnet sind, und Konverter von CSS3-Farbspezifizierern in RGB-Tupel.
Farbnamen
Das ImageColor-Modul unterstützt die folgenden Zeichenfolgenformate:
Hexadezimale Farbspezifizierer, angegeben als #rgb oder #rrggbb. Zum Beispiel steht # 00ff00 für reines Grün.
# 00ff00 hexadezimale Farbe, roter Wert ist 0 (0% rot), grüner Wert ist 255 (100% grün) und der blaue Wert seines RGB ist 0 (0% blau).
Zylinderkoordinatendarstellungen (auch als HSL bezeichnet) der Farbe # 00ff00 Farbton: 0,33, Sättigung: 1,00 und auch der Helligkeitswert von 00ff00 beträgt 0,50.
Das Bildfarbmodul bietet rund 140 Standardfarbnamen, basierend auf den vom X Window-System und den meisten Webbrowsern unterstützten Farben. Farbnamen unterscheiden nicht zwischen Groß- und Kleinschreibung.
ImageColor.getrgb () -Methode
Konvertieren Sie eine Farbzeichenfolge in ein RGB-Tupel. Wenn die Zeichenfolge nicht analysiert werden kann, wird von dieser Funktion eine ValueError-Ausnahme ausgelöst.
Syntax
PIL.ImageColor.getrgb(color)
Wo,
Argumente: Farbe - Eine Farbzeichenfolge
Rückgabewert: (rot, grün, blau [, alpha])
Beispiel 1
from PIL import ImageColor
# using getrgb
img = ImageColor.getrgb("blue")
print(img)
img1 = ImageColor.getrgb("purple")
print(img1)
Ausgabe
(0, 0, 255)
(128, 0, 128)
Beispiel 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()
Ausgabe
ImageColor. getcolor () Methode
Diese Methode ist mit getrgb () identisch, konvertiert jedoch den RGB-Wert in einen Graustufenwert, wenn der Modus nicht aktiviert ist. Die Grafikbefehle unterstützen Formzeichnung und Textanmerkungsfarbe oder ein Palettenbild. Wenn die Zeichenfolge nicht analysiert werden kann, löst diese Funktion eine ValueError-Ausnahme aus.
Syntax
PIL.ImageColor.getcolor(color, mode)
Wo,
Argumente - Eine Farbzeichenfolge
Rückgabewert - (Graustufe [, Alpha]) oder (Rot, Grün, Blau [, Alpha])
Beispiel
#Import required image modules
from PIL import Image,ImageColor
# using getrgb
img = ImageColor.getrgb("skyblue")
print(img)
img1 = ImageColor.getrgb("purple")
print(img1)
Ausgabe
(135, 206, 235)
(128, 0, 128)
Das ‘ImageDraw’Modul bietet einfache 2D-Grafikunterstützung für Image Object. Im Allgemeinen verwenden wir dieses Modul, um neue Bilder zu erstellen, vorhandene Bilder zu kommentieren oder zu retuschieren und um Grafiken im laufenden Betrieb für die Webnutzung zu generieren.
Die Grafikbefehle unterstützen das Zeichnen von Formen und das Kommentieren von Text.
Ein Bild kann gut durchdacht sein, um eine zweidimensionale Anordnung von Pixeln (Bildelementen) zu sein. Ein Pixel ist der kleinste unterstützte Farbpunkt.
Der Ursprung des von ImageDraw verwendeten zweidimensionalen Koordinatensystems liegt in der upper left corner des Bildes.
Die von uns verwendeten Kissenfarbschemata sind RGB. Die Darstellung und Unterstützung von Farb-RGB wird vom Modul bereitgestelltImageColor.
Bitmap, OpenType oder TrueType sind die akzeptablen Schriftarten für Textanmerkungen.
Für die meisten Zeichenbefehle ist möglicherweise ein Begrenzungsrahmenparameter erforderlich, der den Bereich auf dem Bild angibt, auf den der Befehl angewendet werden soll.
Eine Folge von Koordinaten kann als [(x0, y0), (x1, y1),… (xn, yn)] dargestellt werden.
Für einige Zeichenbefehle benötigen wir Winkelwerte.
Beispiel
Das folgende Python-Beispiel zeichnet eine Linie über das angegebene Bild -
#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()
Ausgabe
Wenn Sie das obige Programm als Example.py speichern und ausführen, zeichnet es eine Linie über das Bild und zeigt es mit dem Standard-PNG-Anzeigeprogramm wie folgt an:
Segeltuch
Ein ImageDraw ist eine Kissen-zeichnbare Oberfläche (dh eine Leinwand) eines Bildes.
ImageDraw.Draw (img) gibt eine zeichnbare Canvas-Darstellung des Bildparameters img zurück. Der Hintergrund der Leinwand ist das "img" Bild.
Beispiel
Das folgende Python-Beispiel zeichnet Text auf das angegebene Bild -
#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()
Ausgabe
Formen mit dem Modul 'ImageDraw' zeichnen
Mit dem ImageDraw-Modul können wir verschiedene Formen erstellen, indem wir zuerst ein Zeichnungsobjekt mit dem Bild erstellen, mit dem Sie arbeiten möchten, und es dann anwenden. Einige der gängigen Formen, die wir mit dem 'ImageDraw'-Modul zeichnen können, sind folgende:
Linie
Es folgt die Syntax zum Zeichnen einer Linie mit Python Pillow:
draw.line(xy, fill=None, width=0)
Das line()Die Methode zeichnet eine Linie von der oberen linken zur unteren rechten Ecke des Begrenzungsrahmens xy und der Leinwand. Die Linie wird mit Farbfüllung gefüllt. Die Standardwerte None und 0 gelten für die optionalen Parameter fill und width.
Beispiel
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()
Ausgabe
Finsternis
Es folgt die Syntax zum Zeichnen einer Ellipse mit Python Pillow:
draw.ellipse(xy, fill=None, outline=None)
Das ellipse()Methode zeichnet die Ellipse, die beim Zeichnen von der Begrenzungsbox xy umgeben ist. Die Form wird mit Farbfüllung und dem Umfang in Farbkontur gefüllt. Die Standardwerte Keine sind für die Parameter Füllung und Breite, die optional sind.
Beispiel
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()
Ausgabe
Rechteck
Es folgt die Syntax zum Zeichnen eines Rechtecks mit Python Pillow:
draw.rectangle(xy, fill=None, outline=None)
Das rectangle()Methode zeichnet das Rechteck mit Begrenzungsrahmen xy beim Zeichnen. Die Form wird mit Farbfüllung und dem Umfang in Farbkontur gefüllt. Die Standardwerte Keine sind für die Parameter Füllung und Breite, die optional sind.
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()
Ausgabe
Polygon
Es folgt die Syntax zum Zeichnen eines Rechtecks mit Python Pillow:
draw.polygon(seq, fill=None, outline=None)
Das polygon()Die Methode zeichnet ein Polygon, das mit geraden Linien die Koordinatensequenzpositionen nach dem Zeichnen verbindet. Die erste und die letzte Koordinate in der Folge sind ebenfalls durch eine gerade Linie verbunden. Die Form wird mit Farbfüllung und dem Umfang in Farbkontur gefüllt. Die Parameter Füllung und Gliederung sind optional mit den Standardwerten Keine.
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()
Ausgabe
Die Python Imaging Library (PIL) enthält einige grundlegende Unterstützung für Bildsequenzen (Animationsformate). FLI / FLC, GIF und einige experimentelle Formate sind die unterstützten Sequenzformate. TIFF-Dateien können auch mehr als einen Frame enthalten.
Beim Öffnen einer Sequenzdatei lädt PIL automatisch den ersten Frame in der Sequenz. Um zwischen verschiedenen Frames zu wechseln, können Sie die Such- und Tell-Methoden verwenden.
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
Ausgabe
raise EOFError
EOFError
Wie wir oben sehen können, erhalten Sie eine EOFError-Ausnahme, wenn die Sequenz endet.
Bei den meisten Treibern in der neuesten Version der Bibliothek können Sie nur zum nächsten Frame suchen (wie im obigen Beispiel). Um die Datei zurückzuspulen, müssen Sie sie möglicherweise erneut öffnen.
Eine Sequenziteratorklasse
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...
Sie können Text auf Bilder schreiben, indem Sie die Position des Textes, den Text selbst und die Farbe des Textes übergeben. Wir können dieser Methode mehrere andere Parameter übergeben.
Beispiel
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")
Eingang
Ausgabe
Wenn Sie das obige Programm als Example.py speichern und ausführen, wird der angegebene Text hinzugefügt und mit dem Standard-PNG-Anzeigeprogramm wie folgt angezeigt:
Auswahl der Schriftart
Es gibt zahlreiche Möglichkeiten, die Schriftart auszuwählen, die zum Schreiben auf das Bild verwendet wird. Wir können Schriftarten entweder direkt aus dem System laden, indem wir den vollständigen Pfad zur Funktion übergeben, oder wir können die ImageFont verwenden, um eine TrueType-Schriftart zu laden.
Beispiel
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")
Ausgabe
In diesem Kapitel verwenden wir numpy, um Bilddaten mithilfe der Python-Imaging-Bibliothek - „Pillow“ - zu speichern und zu bearbeiten.
Bevor Sie mit diesem Kapitel fortfahren, öffnen Sie die Eingabeaufforderung im Administratormodus und führen Sie den folgenden Befehl aus, um numpy zu installieren -
pip install numpy
Note - Dies funktioniert nur, wenn Sie PIP installiert und aktualisiert haben.
Erstellen eines Bildes aus einem Numpy Array
Erstellen Sie ein RGB-Bild mit PIL und speichern Sie es als JPG-Datei. Im folgenden Beispiel werden wir -
Erstellen Sie ein 150 x 250 Pixel großes Array.
Füllen Sie die linke Hälfte des Arrays mit Orange.
Füllen Sie die rechte Hälfte des Arrays mit Blau.
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")
Ausgabe
Graustufenbilder erstellen
Das Erstellen von Graustufenbildern unterscheidet sich geringfügig vom Erstellen eines RGB-Bildes. Wir können das zweidimensionale Array verwenden, um ein Graustufenbild zu erstellen.
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')
Ausgabe
Erstellen eines Numpy-Arrays aus einem Bild
Sie können das PIL-Bild in ein Numpy-Array konvertieren und umgekehrt. Ein kleines Programm, um dasselbe zu demonstrieren, ist unten angegeben.
Beispiel
#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")
Ausgabe
Wenn Sie das obige Programm als Example.py speichern und ausführen -
Es zeigt das Originalbild an.
Zeigt das von ihm abgerufene Array an.
Konvertiert das Array wieder in ein Bild und zeigt es an.
Da wir die show () -Methode verwendet haben, werden die Bilder mit dem Standard-PNG-Anzeigeprogramm wie folgt angezeigt.
[[[ 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