Image.open () liefert ein einfaches weißes Bild
Ich versuche dieses Bild zu bearbeiten:
Wenn ich jedoch renne
im = Image.open(filename)
im.show()
Es wird ein völlig normales weißes Bild derselben Größe ausgegeben. Warum Image.open()funktioniert das nicht? Wie kann ich das beheben? Gibt es eine andere Bibliothek, mit der ich Nicht-255-Pixelwerte abrufen kann (das richtige Pixelarray)?
Danke, Vinny
Antworten
Image.openscheint tatsächlich gut zu funktionieren getpixel, putpixelund saveSie können das Bild trotzdem laden, bearbeiten und speichern.
Das Problem scheint zu sein, dass die temporäre Datei, in der das Bild gespeichert showist, nur weiß ist, sodass der Bildbetrachter nur ein weißes Bild anzeigt. Ihr Originalbild ist 16-Bit-Graustufen, aber das temporäre Bild wird als 8-Bit-Graustufen gespeichert.
Meine aktuelle Theorie ist, dass es tatsächlich einen Fehler geben könnte, bei showdem ein 16-Bit-Graustufenbild nur in 8-Bit-Graustufen "konvertiert" wird, indem alle Pixelwerte auf 255 begrenzt werden, was zu einem rein weißen temporären Bild führt, da alle Pixelwerte in der Original sind über 30.000.
Wenn Sie ein Pixel vor dem Aufruf auf einen Wert unter 255 einstellen show, wird dieses Pixel korrekt angezeigt. Angenommen, Sie möchten den Kontrast im Bild verbessern, können Sie das Bild öffnen, die Werte einem Bereich von 0 bis 255 zuordnen (z. B. mit numpy) und dann verwenden show.
from PIL import Image
import numpy as np
arr = np.array(Image.open("Rt5Ov.png"))
arr = (arr - arr.min()) * 255 // (arr.max() - arr.min())
img = Image.fromarray(arr.astype("uint8"))
img.show()
Aber wie gesagt, da es saveso zu funktionieren scheint, wie es sollte, können Sie auch die 16-Bit-Graustufentiefe und nur savedas bearbeitete Bild beibehalten, anstatt es zu verwenden show.
Sie können die openCV-Bibliothek zum Laden von Bildern verwenden.
import cv2
img = cv2.imread('image file')
plt.show(img)