2016-05-29 4 views
1

Ich habe ein Graustufenbild mit der Python Imaging Library geöffnet, jeden Pixelwert in eine andere Bildvariable gleicher Größe kopiert und gespeichert. Wenn ich nun das neue Bild mit einem Bildbetrachter öffne, sieht es rötlich aus. Ich habe die Image.new() -Methode mit und ohne die Argumente "white" und "black" verwendet, die dieselbe rötliche Ausgabe erhalten.Python Imaging Library macht ein Bild rötlich

Mein Code:

from PIL import Image 
import math 

def run(): 
    im = Image.open("hrabowski.jpg") 
    pix = im.load() 
    print im.size 
    # print pix[0, 1] 

    im2 = Image.new("RGB", (2400, 2400)) 

    for i in range(im.size[0]): 
     for j in range(im.size[0]): 
      im2.putpixel((i, j), pix[i, j]) 

    im2.save("hrabowski-2400-2400.jpg") 

Originalbild (skaliert auf 500 x 500):

enter image description here

Python Ausgabe meines Codes (skaliert bis zu 500 x 500):

enter image description here

Könnte mir bitte jemand sagen, was ich falsch mache?

Antwort

2

Ihr Problem ist, dass Sie ein RGB-Bild erstellen möchten, das drei Kanäle hat. Daher besteht ein Pixelwert aus drei Werten und nicht nur einem (in Ihrem Fall verwenden Sie den Grauwert des Originalbildes für jeden der Kanäle).

Ich habe den Code entsprechend geändert.

Eine Randbemerkung: Ich bin mir fast sicher, dass es eine bessere Möglichkeit gibt, das zu tun, was Sie erreichen wollen. In der Regel ist es nicht nötig, einzelne Pixel zu durchlaufen, aber ich bin mir nicht sicher.

from PIL import Image 
import math 

def run(): 
    im = Image.open("ZHiG0.jpg") 
    pix = im.load() 
    print im.size 
    # print pix[0, 1] 

    im2 = Image.new("RGB", (2400, 2400)) 

    for i in range(im.size[0]): 
     for j in range(im.size[0]): 
      im2.putpixel((i, j), (pix[i, j],pix[i, j],pix[i, j])) 

    im2.save("ZHiG0-2400-2400.jpg") 
run() 
Verwandte Themen