2011-10-14 22 views
7

Tengo alrededor de 3000 imágenes y 13 colores diferentes (el fondo de la mayoría de estas imágenes es blanco). Si el color principal de una imagen es uno de esos 13 colores diferentes, me gustaría que estén asociados.detección de color principal en Python

He visto preguntas similares a Image color detection using python que piden un algoritmo de color promedio. He copiado bastante ese código, usando la biblioteca de imágenes de Python y los histogramas, y lo hice funcionar, pero me parece que no es demasiado confiable para determinar los colores principales.

¿Alguna idea? O las bibliotecas que podrían abordar esto?

¡Gracias de antemano!

: EDITAR: Gracias a todos ustedes, todos dijeron lo mismo, para crear "cubos" y aumentar el conteo de cubos con cada píxel más cercano de la imagen. Parece que recibo muchas imágenes que muestran "Blanco" o "Beige", que también es el fondo en la mayoría de estas imágenes. ¿Hay alguna forma de evitar o ignorar el fondo?

Gracias de nuevo.

+0

¿Cuál es su definición de color? un triplete rgb? (r/g, b/g)? el tono del espacio hsv? – Simon

+0

disculpa la ambigüedad - quise decir triplete RGB – dchang

Respuesta

9

Puede usar la función getcolors para obtener una lista de todos los colores de la imagen. Se devuelve una lista de tuplas en la forma:

(N, COLOR) 

donde N es el número de veces que el color COLOR se produce en la imagen. Para obtener el color máxima que se produce, puede pasar la lista a la función max:

>>> from PIL import Image 
>>> im = Image.open("test.jpg") 
>>> max(im.getcolors(im.size[0]*im.size[1])) 
(183, (255, 79, 79)) 

Tenga en cuenta que pasé im.size[0]*im.size[1] a la función getcolors porque ese es el valor máximo maxcolors (ver the docs para más detalles).

+0

¿La biblioteca de imágenes ahora se llama algo más? –

+0

Lo tengo. 'de la imagen de importación PIL' –

2

Personalmente, dividiría el espacio de color en 8-16 colores principales, luego, para cada píxel aumentaría el cubo de colores más cercano en uno. Al final, gana el color del cubo con la mayor cantidad de píxeles.

Básicamente, creo mediana en lugar de la media . Solo le importan los colores en la imagen, mientras que los colores promedios generalmente le dan un color completamente nuevo.

1

Dado que intenta hacer coincidir una pequeña cantidad de colores preexistentes, puede intentar un enfoque diferente. Pruebe cada imagen con todos los colores y vea cuál es la más cercana.

En cuanto a hacer la coincidencia, comenzaría cambiando el tamaño de cada imagen a un tamaño más pequeño para reducir la cantidad de trabajo que va a hacer para cada una; nuestra percepción del color de una imagen no depende demasiado de la cantidad de detalles. Para cada píxel de la imagen más pequeña, encuentre cuál de los 13 colores es el más cercano. Si está dentro de algún umbral, golpea un contador para ese color. Al final, cualquiera de los 13 tiene el recuento más alto es el ganador.

Cuestiones relacionadas