Hier ist ein Beispiel für das Lesen von Pixeln.
Lesen Sie die Pixel des Originalbildes → Prozess → Schreiben Sie die verarbeiteten Daten Es wird das Verfahren wie.
Insbesondere Pixel lesen → in Graustufen konvertieren → in Sepia-Schattierungen konvertieren → Pixel schreiben Dieser Vorgang wird für alle Pixel einzeln ausgeführt.
Ich weiß, dass es einen effizienteren Weg gibt.
Das Originalbild
Ausführungsergebnis
Läuft unter Python 2.7. Es scheint, dass PIL die Python 3-Serie noch nicht unterstützt.
image-sepia.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Filter, um das Bild in Sepia umzuwandeln
Erstes Argument:Geben Sie den Dateinamen ein
Zweites Argument:Name der Ausgabedatei (optional)
Sepia ist eine schwarzbraune Farbe aus Tintenfischtinte. Wenn Sie das Bild sepiaartig machen, sieht es so aus, als wäre es gezeichnet worden.
-Extrahieren Sie Helligkeitsinformationen nach Graustufen
-Konvertieren Sie das Ganze in bräunlich
'''
import sys
import Image
def grayscale(r,g,b):
'''
Konvertieren Sie RGB-Werte in Graustufen (Schwarzweiß).
'''
#NTSC-gewichtete Mittelungsmethode
gray = int(r * 0.298912 + g * 0.586611 + b * 0.114478)
#Einfache Mittelungsmethode
#gray = int((r+g+b)/3)
return gray
def sepiatone(r,g,b):
'''
Konvertieren Sie RGB-Werte in Sepia
Es scheint keine Regel zu geben, um in den Sepia-Stil zu konvertieren. Wenn es also so aussieht, ist es in Ordnung.
'''
gray = grayscale(r,g,b)
#sr = int(gray * 0.9);sg = int(gray * 0.7);sb = int(gray * 0.4)
#sr = gray; sg = int(gray * 0.8);sb = int(gray * 0.6)
sr = int(gray * 0.8 + 2); sg = int(gray * 0.6 + 2);sb = int(gray * 0.4 + 2)
return sr,sg,sb
def make_image(infile, outfile):
'''
Bild in Sepia konvertieren
'''
img = Image.open(infile)
img = img.convert("RGB")
x,y = img.size
for ly in range( y):
for lx in range( x):
r,g,b = img.getpixel((lx, ly))
sr,sg,sb = sepiatone(r,g,b)
img.putpixel((lx,ly), (sr,sg,sb))
#↓ Wenn Sie möchten, dass es etwas verblasst aussieht
#img.putpixel((lx,ly), ((r+sr)/2,(g+sg)/2,(b+sb)/2))
img.save(outfile)
return
def usage():
sys.stderr.write("Usage: %s infile [outfile] \n" % sys.argv[0])
return
if __name__ == '__main__':
argvs = sys.argv
argc = len(argvs)
#Argumentprüfung
if ((argc == 1 ) or (argc > 3)):
usage()
sys.exit(1)
if (argc > 2):
outfile = argvs[2]
else:
outfile = "output.png "
infile = argvs[1]
make_image(infile , outfile)
# EOF
Recommended Posts