2010-02-16 12 views
15

Nach dem Herunterladen eines Bildes von der Website muss ich die Farbe des heruntergeladenen Bildes erkennen.Ich habe das Bild erfolgreich heruntergeladen, aber ich muss die Farbe des entsprechenden Bildes erkennen und es in den Namen speichern der entsprechenden Farbe. Code verwendet wird unten angegeben. Sagen Sie mir, wie kann ich es von der aktuellen Position erreichen.Bild Farberkennung mit Python

imageurl='http://www.example.com/' 
opener1 = urllib2.build_opener() 
page1=opener1.open(imageurl) 
my_picture=page1.read() 
fout = open('images/tony'+image[s], "wb") 
fout.write(my_picture) 
fout.close() 
+0

Was meinst du mit der Bildfarbe - ist das Bild komplett eine Farbe? –

+0

Ya das Bild ist von einer einzigen Farbe ...... – user244470

+0

Es ist nicht klar - wollen Sie durchschnittliche Farbe oder häufigste Farbe? –

Antwort

10

Use a PIL (Python Image Library) histogram. Schleife über das Histogramm und den Durchschnitt der Pixelfarbe durch die Pixelzahl gewogen.

+4

Als Antwort auf eine Follow-up-Frage, hier ist ein funktionierendes Beispiel, das diesen Ansatz demonstriert: https://gist.github.com/1246268 – olooney

9

Wie von anderen erwähnt, ist PIL die richtige Bibliothek. Hier ist eine Funktion, die ein Bild öffnet und nach der Hauptfarbe sucht.

def get_main_color(file): 
    img = Image.open(file) 
    colors = img.getcolors(256) #put a higher value if there are many colors in your image 
    max_occurence, most_present = 0, 0 
    try: 
     for c in colors: 
      if c[0] > max_occurence: 
       (max_occurence, most_present) = c 
     return most_present 
    except TypeError: 
     raise Exception("Too many colors in the image") 

Ich hoffe, es

-Update hilft: passing 256 bis getcolors für sehr kleine Bilder ok ist, aber nicht in den meisten Fällen funktionieren. Dieser Wert muss für größere Bilder erhöht werden. Zum Beispiel ist 1024 * 1024 für 400 Pixel * 300 Pixel Bild in Ordnung.

5

Sie sollten den Parser PIL aus der ImageFile-Klasse verwenden, um die Datei von der URL aus zu lesen. Dann ist das Leben ziemlich einfach, weil du gesagt hast, dass das ganze Bild dieselbe Farbe hat. Hier ist ein Code, der auf dem Code erstellt:

import urllib2 
import ImageFile 

image_url = "http://plainview.files.wordpress.com/2009/06/black.jpg" 
opener1 = urllib2.build_opener() 
page1=opener1.open(image_url) 

p = ImageFile.Parser() 

while 1: 
    s = page1.read(1024) 
    if not s: 
     break 
    p.feed(s) 

im = p.close() 
r,g,b = im.getpixel((0,0)) 

fout = open('images/tony'+image[s]+"%d%_d%_d"%(r,g,b), "wb") 
fout.write(my_picture) 
fout.close() 

Dies sollte die roten, grünen und blauen Werte der Farbe des ersten Pixels des Bildes bis zum Ende des Bildnamen anhängen. Ich habe alles bis zu den Fout-Linien getestet.

+0

Danke Justin für deine Antwort, es hat mir sehr geholfen. Tatsächlich habe ich den Dateinamen mit rot grün und blaue Werte der Farbe des gegebenen Pixels des Bildes. Ist es möglich, tatsächlichen Farbnamen dieses Bildes für den gegebenen Pixel zu erhalten .... oder können wir die erhaltenen Pixel zum entsprechenden Farbnamen Arun konvertieren – user244470

+1

müssten Sie ein Wörterbuch mit RGB-Werten als Schlüssel und den Namen als Werte erstellen. Sie könnten die Farbliste auf dieser Seite, http://en.wikipedia.org/wiki/List_of_colors, vielleicht verwenden. Sie würden urllib2 verwenden, um die Namen und die entsprechenden RGB-Werte abzurufen. –