2016-08-01 75 views
0

Ich versuche einen relativ einfachen Code zu erstellen, der in der Lage ist, die Größe eines Bildes zu lesen und alle RGB-Werte zurückzugeben. Ich verwende PIL auf Python 2.7, und mein Code sieht wie folgt aus:RGB-Werte, die von PIL zurückgegeben werden, entsprechen nicht der RGB-Farbe

import os, sys 
from PIL import Image 
img = Image.open('C:/image.png') 
pixels = img.load() 

print(pixels[0, 1]) 

jetzt wurde dieser Code tatsächlich aus dieser Website als eine Möglichkeit bekommen eine GIF-Datei zu lesen. Ich versuche, den Code ein RGB-Tupel (in diesem Fall (55, 55, 55)) auszudrucken, aber alles, was es mir gibt, ist eine kleine Reihe von nicht verwandten Zahlen, die normalerweise 34 enthalten viele andere Beispiele für Code, ob von hier oder nicht, aber es scheint nicht zu funktionieren. Ist das mit dem .png-Format nicht in Ordnung? Muss ich im rgb-Teil weiter coden? Ich bin glücklich für jede Hilfe.

+1

Mit kleinen Sequenz meinen Sie 4 Zahlen? (bedeutet RGBA) Können Sie die genaue Ausgabe posten? – jedwards

+1

Bitte laden Sie Ihr Bild irgendwo hoch (wie [imgur] (http://imgur.com/)) und bearbeiten Sie Ihre Frage und fügen Sie einen Link hinzu. – martineau

+0

In dieser Situation sind es ja 4 Nummern. Die Ausgabe ist (8, 8, 8, 34). Vor diesem Code war es (34, 34, 34). Es variiert. –

Antwort

4

Meine Vermutung ist, dass Ihre Bilddatei vor multiplizierte Alpha-Werte verwendet. Die Werte von 8, die Sie sehen, liegen ziemlich nahe bei 55*34/255 (wobei 34 der Alpha-Kanal-Wert ist).

PIL verwendet den Modus "RGBa" (mit einem kleinen Wert a), um anzuzeigen, wenn Alpha-Multiplikator verwendet wird. Sie können in der Lage sein PIL zu sagen, die in den normalen "RGBA" verdeckte, wo die Pixel in etwa die Werte haben, werden Sie erwarten:

img = Image.open('C:/image.png').convert("RGBA") 

Beachten Sie, dass, wenn Ihr Bild soll nicht teilweise transparent, überhaupt sein, können Sie größere Probleme haben. Wir können Ihnen dabei nicht helfen, ohne mehr über Ihr Image zu erfahren.