2010-02-16 13 views
15

Dopo aver scaricato un'immagine dal sito ho bisogno di rilevare il colore dell'immagine scaricata. Ho scaricato l'immagine con successo ma ho bisogno di rilevare il colore dell'immagine corrispondente e di salvarla nel nome del corrispondente colore. Il codice utilizzato è indicato di seguito. Dimmi come posso ottenerlo dalla posizione corrente.Rilevamento del colore dell'immagine usando 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

Cosa intendi con il colore dell'immagine? L'immagine è completamente un colore? –

+0

Ya l'immagine è di un solo colore ...... – user244470

+0

Non è chiaro - vuoi il colore medio o il colore più frequente? –

risposta

10

Use a PIL (Python Image Library) histogram. Loop sopra l'istogramma e fare la media di colore dei pixel pesato dal numero di pixel.

+4

In risposta a una domanda di follow-up, ecco un esempio funzionante che dimostra questo approccio: https://gist.github.com/1246268 – olooney

9

Come menzionato da altri, PIL è la libreria giusta. Ecco una funzione che apre un'immagine e cerca il colore principale.

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") 

Spero che aiuta

Aggiornamento: passando da 256 a getcolors è ok per immagini molto piccole, ma potrebbe non funzionare in molti casi. Questo valore deve essere aumentato per immagini più grandi. ad esempio, 1024 * 1024 è ok per l'immagine 400 pixel * 300 pixel.

5

È necessario utilizzare il parser PIL della classe ImageFile per leggere il file dall'URL. Quindi la vita è abbastanza facile perché hai detto che l'intera immagine è dello stesso colore. Qui è un codice che si basa sul vostro codice:

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() 

Questo dovrebbe aggiungere i valori di rosso verde e blu del colore del primo pixel dell'immagine alla fine del nome dell'immagine. Ho provato tutto fino alle linee di fuoco.

+0

Grazie Justin per la sua risposta ci ha davvero aiutato molto. In realtà ho ottenuto il nome del file con il rosso verde e valori blu del colore del dato pixel dell'immagine.È possibile ottenere il nome del colore effettivo di quell'immagine per il pixel dato .... o possiamo convertire i pixel ottenuti nel corrispondente nome di colore Arun – user244470

+1

è necessario creare un dizionario con valori RGB come chiavi e nomi come valori. Potresti usare la lista dei colori su questo sito, http://en.wikipedia.org/wiki/List_of_colors, forse. Dovresti usare urllib2 per recuperare i nomi e i corrispondenti valori RGB. –

Problemi correlati