Detección de color de imagen usando python.

Después de descargar una imagen del sitio, necesito detectar el color de la imagen descargada. Descargué exitosamente la imagen pero necesito detectar el color de la imagen correspondiente y guardarla en el nombre del color correspondiente. El código utilizado es indicado a continuación. Dígame cómo puedo lograrlo desde la posición actual.

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

Utilice un histogtwig PIL (biblioteca de imágenes de Python). Recorra el histogtwig y tome el promedio de color de píxel ponderado por el conteo de píxeles.

Como han mencionado 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: pasar 256 a getcolors está bien para imágenes muy pequeñas pero puede que no funcione en la mayoría de los casos. Este valor debe ser aumentado para imágenes más grandes. por ejemplo, 1024 * 1024 está bien para una imagen de 400 píxeles * 300 píxeles.

Debe usar el analizador de 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://sofes.miximages.com/python/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 agregar los valores rojo verde y azul del color del primer píxel de la imagen al final del nombre de la imagen. He probado todo hasta las líneas fout.

Podría usar el módulo de imagen de la biblioteca PIL para hacer esto. Consulte: http://effbot.org/imagingbook/image.htm .

Podría usar el algoritmo K-medias para obtener los K colores principales de la imagen. Aquí hay un ejemplo de cómo hacerlo: K-significa usar OpenCV (Python)