2010-02-16 30 views
15

Después de descargar una imagen del sitio, necesito detectar el color de la imagen descargada. He descargado la imagen correctamente pero necesito detectar el color de la imagen correspondiente y guardarla en el nombre del color correspondiente. El código utilizado se proporciona a continuación. Dígame cómo puedo lograrlo desde la posición actual.Detección de color de imagen 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

¿Qué quiere decir con el color de la imagen? ¿La imagen tiene un solo color? –

+0

Ya la imagen es de un solo color ...... – user244470

+0

No está claro, ¿quiere color promedio o el color más frecuente? –

Respuesta

10

Use a PIL (Python Image Library) histogram. bucle sobre el histograma y tomar el promedio de color de píxel ponderado por el número de píxeles.

+4

En respuesta a una pregunta de seguimiento, he aquí un ejemplo de trabajo que demuestra este enfoque: https://gist.github.com/1246268 – olooney

9

Según lo mencionado por otros, PIL es la biblioteca correcta. Aquí hay una función que abre una imagen y busca el color principal.

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

espero que ayude

Actualización: pasando de 256 a getcolors está bien para imágenes muy pequeñas, pero no puede trabajar en la mayoría de los casos. Este valor debe aumentarse para imágenes más grandes. por ejemplo, 1024 * 1024 está bien para 400 píxeles * imagen de 300 píxeles.

5

Debería utilizar el Analizador PIL de la clase ImageFile para leer el archivo desde la URL. Entonces la vida es bastante fácil porque dijiste que toda la imagen es del mismo color. Aquí hay un código que se basa en su código:

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

Esto debería añadir los valores de rojo verde y azul del color del primer píxel de la imagen al final del nombre de la imagen. Probé todo hasta las líneas de búsqueda.

+0

Gracias a Justin por su respuesta, realmente me ayudó mucho. De hecho, recibí el nombre del archivo con el rojo verde y valores azules del color del píxel dado de la imagen. ¿Es posible obtener el nombre de color real de esa imagen para el píxel dado ... o podemos convertir los píxeles obtenidos al nombre de color correspondiente respetos Arun – user244470

+1

necesitaría hacer un diccionario con valores RGB como las claves y los nombres como los valores. Puede usar la lista de colores en este sitio, http://en.wikipedia.org/wiki/List_of_colors, tal vez. Utilizaría urllib2 para recuperar los nombres y los valores RGB correspondientes. –

Cuestiones relacionadas