Wie eine Schleife alle Pixel im Bild, und sagen, ob Sie schwarz oder weiß sind
Habe ich ein einfaches schwarz und weiß nur gif-Bild (400x400px sagen wir mal).
Ich brauchen, um alle Pixel aus, das Bild und finden, ob Sie schwarz oder weiß sind. Ich brauche, um ein Wörterbuch zu erstellen mit den Informationen über die Pixel und Ihre Farben dann.
Ich bin Recht neu in python, also bin ich ein bisschen zu kämpfen mit diesem. Aber hier geht mein script bisher:
#!/usr/bin/env python
import os
import Image
os.chdir("D:/python-projects")
aImage = Image.open("input.gif")
aPixelsBlackOrWhiteDictionary = {}
# now I need to fill the dictionary with values such as
# "X,Y": 0
# "X,Y": 1
# where X,Y are coordinates and 0/1 i the pixel color (b/w)
Grundsätzlich möchte ich die final-Wörterbuch auf so etwas wie dieses:
"0,0" : 0 # pixel with X=0,Y=0 coordinates is black
"1,0" : 1 # pixel with X=1,Y=0 coordinates is White
EDIT:
Wenn ich versuche:
print aImage[0, 0]
Bekomme ich eine Fehlermeldung:
Traceback (most recent call last):
File "D:\python-projects\backprop.py", line 15, in <module>
print aImage[0, 0]
File "C:\Python26\lib\site-packages\pil-1.1.7-py2.6-win32.egg\Image.py", line
512, in __getattr__
raise AttributeError(name)
AttributeError: __getitem__
Sie können nicht verwenden Sie die Indizierung auf diese Weise, es sei denn, Sie verwenden
das Wörterbuch, das Sie wollen, bereits vorhanden ist.. wie die
load
. Siehe Paulo Antworten und eventuell Kommentare dazu.das Wörterbuch, das Sie wollen, bereits vorhanden ist.. wie die
aImage
struct. nur tun aImage.getpixexl((0,0))==(255,255,255)
.InformationsquelleAutor Richard Knop | 2010-10-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie mit Hilfe
getpixel
anstatt Indizierung Betreiber. Beachten Sie, dass dies kann sehr langsam sein. Sie wären besser dran mitgetdata
gibt alle Pixel als eine Sequenz.Mein Punkt war, dass er sollte
getpixel
da die Indizierung würde sich nicht kompilieren mit seinen code, nicht, dass er nutzen sollgetpixel
im Allgemeinen. Wie mein post sagt,getpixel
langsam ist. Allerdings denke ich, dassgetdata
und Indizierung sind wahrscheinlich gleichermaßen geeignet aus einer Effizienz-Perspektive.sorry, habe ich falsch gelesen deine Antwort.
InformationsquelleAutor Brian
Versuchen:
Beachten Sie auch, dass Sie verwenden können Tupel als dictionary-Schlüssel, die Sie verwenden können, mydict[(x, y)] anstelle von mydict["x,y"].
Diese pixel-Daten bereits im Bild gespeichert, warum speichern Sie es in einem dict?
Scheint nicht geklappt zu haben, sehr gut...
Verwenden Sie eine alte version von PIL? pythonware.com/library/pil/handbook/image.htm sagt, das arbeiten in PIL 1.1.6+
behoben. Zugriff mit dieser Methode ist viel schneller als getpixel und putpixel ().
es war ein Fehler im Beispiel-code vor der Ausgabe.
InformationsquelleAutor Paulo Scardine
Wenn Sie wollten, um zu sehen, ob ein Daumen nur noch mono, die Sie könnten versuchen, diese:-
InformationsquelleAutor Dantalion
Wenn Sie sicherstellen können, dass Ihr Bild in black&white-Modus können Sie tun:
Diese nutzt die
getpixel
erwähnt in anderen Antworten und die Schlüssel von Ihrem Wörterbuch werden die Tupel(x,y)
stellen Sie sicher, dass
getpixel
ist wieder in Nullen und EinsenInformationsquelleAutor Thiago Druciaki
Sind Sie sicher Sie das tun wollen? Es wäre entsetzlich ineffizient, verwenden Sie ein Wörterbuch, um diese Daten speichern.
Ich würde denken, ein numpy-array wäre viel besser geeignet...
Dies ist nur ein kleines Bild (400x400 Pixel), damit ich nicht denke, dass es darauf ankommt. Aber ich könnte es überarbeiten Sie den code, wenn ich alles bekommen, was ich brauche, funktioniert, so ist es effizienter.
InformationsquelleAutor SamB