Das erste Problem ist der Versuch, Bilder unter variablen Namen abzuspeichern. Ich kann speichern, wenn ich den Bildnamen fest angebe (siehe die letzen Zeilen meines bisherigen Quellcodes), aber wenn ich den Namen "zusammensetzen" lasse (Zeilen 15 bis 21, derzeit auskommentiert), bekomme ich eine Fehlermeldung:
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Pfad\Bildverarbeitung.py", line 19, in <module>
Kopie.save(Speicherbezeichnung, "BMP")
File "C:\Programme\Python25\Lib\site-packages\PIL\Image.py", line 1399, in save
fp = __builtin__.open(fp, "wb")
IOError: [Errno 2] No such file or directory: '"TestF3.bmp"'
Das Histogramm sagt mir, dass überhaupt nur 15 Werte auftreten. Das kann ganz gut sein; es sind in jedem Fall mehr als 5 Werte, aber sehr viel mehr müssen es nicht sein. Um zu sehen, welches Pixel welchen Wert hat, wollte ich jetzt jeweils die Pixel eines Grauwerts auf irgendeinen bisher nicht verwendeten Grauwert (willkürlich: 240) setzen und das entstehende Bild abspeichern.
Da ich derzeit das Bild nicht neu einlese, müssten zunehmend Bereiche den Grauwert 240 annehmen - war so meine Theorie. Die Praxis ist, dass ich viermal das Originalbild speichere.
Mein Code:
Code: Alles auswählen
# -*- coding: cp1252 -*-
import os, sys, Image
im = Image.open("Testbild.bmp")
# Ausgabe von Informationen über das Bild:
print "Bildgroesse: ", im.size
Bildbreite, Bildhoehe = im.size
print "Bildbreite = ", Bildbreite, ", Bildhoehe = ", Bildhoehe
print "Bildmodus: ", im.mode
histogra = im.histogram()
print histogra
# Versuch, eine Kopie des Bildes unter variablem Namen zu speichern:
# Kopie = im.copy()
# NeuerName = raw_input("Name für die erste Bildkopie, ohne Erweiterung: ")
# Speicherbezeichnung = "\"" + str(NeuerName) + ".bmp\""
# print Speicherbezeichnung
# Kopie.save(Speicherbezeichnung, "BMP")
# im.close()
# Versuch, Pixelwerte gezielt zu ändern:
for n in range(10,14):
# fuer jedes n:
for a in range(300):
for b in range(300):
aktuPix = im.getpixel((a,b))
if aktuPix == n:
aktuPix = ((a,b),240)
b += 1
a+= 1
# abhängig vom n unter folgenden Namen speichern:
if n == 10:
im.save("Pixelaustausch0.bmp", "BMP")
elif n == 11:
im.save("Pixelaustausch1.bmp", "BMP")
elif n == 12:
im.save("Pixelaustausch2.bmp", "BMP")
elif n == 13:
im.save("Pixelaustausch3.bmp", "BMP")
else:
pass
Code: Alles auswählen
Bildgroesse: (603, 643)
Bildbreite = 603 , Bildhoehe = 643
Bildmodus: P
[4379, 936, 564, 1053, 548, 6012, 2033, 810, 1132, 30941, 558, 164847, 179, 170165, 2003, 1569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
(Dafür spricht, daß die Grauwerte meines Erachtens weiter streuen müssten, ich hatte erwartet, dass hin und wieder ein Wert von 0 abweicht, aber der niedrigste Grauwert um die 30 und der hoechste um die 230 liegen müsste.)
Wenn das der Fall sein sollte - kann ich die Palette gezielt manipulieren?
Meinen besten Dank für die Hilfe schonmal!