python - machine - nltk phone number
detección de color principal en Python (3)
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.
He visto preguntas similares, como la detección de color de imagen con Python, que requieren 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.
¿Algunas ideas? O las bibliotecas que podrían abordar esto?
¡Gracias por adelantado!
: EDITAR: Gracias chicos - todos dijeron lo mismo, crear "cubos" y aumentar el conteo del cubo 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.
Como 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 harás 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.
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, piense en la mediana en lugar del promedio . Solo te importan los colores de la imagen, mientras que el promedio de colores te da un color completamente nuevo.
Puede usar la función getcolors para obtener una lista de todos los colores en la imagen. Devuelve una lista de tuplas en el siguiente formato:
(N, COLOR)
donde N
es el número de veces que el COLOR
color ocurre en la imagen. Para obtener el máximo color posible, puede pasar la lista a la función máxima :
>>> 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 de maxcolors
(vea los documentos para más detalles).