¿Hay alguna forma de contar el número de píxeles de cada color en una imagen?

Hago diseños de punto de cruz, últimamente he estado usando Affinity Photo/Designer. Entonces puedo calcular cuánto de cada hilo de color necesito, quiero contar la cantidad de cada píxel de cada color (en la imagen final aplanada) pero no puedo encontrar ninguna manera, en Affinity o cualquier otra cosa que haya Lo intenté, pero estoy feliz de probar cualquier cosa que no cueste dinero (o que ya tenga, así que no sugiera nada hecho por Adobe). ¿Puede alguien ayudarme?

Bastante seguro de que es posible hacer esto con el código de Python. Simplemente cargaría la imagen como una matriz de valores (con cada conjunto de valores correspondiente a un píxel), luego iteraría contando la cantidad de píxeles con valores dentro de cada color que le interesa. No es algo que he Sin embargo, realmente lo hice yo mismo, por lo que no sé las funciones exactas que necesitaría llamar para eso.
Es posible en cualquier idioma en el que pueda hacer procesamiento de imágenes.
Dudo en recomendar que se use algo de CodeGolf en código real, pero puede ser útil aquí, ya que ofrece soluciones a este problema exacto en múltiples lenguajes de programación. codegolf.stackexchange.com/q/81256/38183
@EngineerToast, ¿qué podría salir mal? Quiero decir que tiene una prueba de regresión, documentación y sabe cómo contactar al autor. Eso es mejor que la mayoría de los códigos que existen.
@EngineerToast la respuesta de Python 2 (0 votos) está casi sin golf, por lo que no debería molestar a nadie que pueda trabajar con Python
@joojaa ¡Muy gracioso! Sí, tienes razón, ¡pero imagínate si quisieras hacer un cambio menor en el código!

Respuestas (4)

Puede hacerlo con GIMP, que es gratuito, de código abierto y funciona en Mac, Windows y Linux.

  1. Abra una imagen en GIMP, usando Archivo > Abrir

  2. En el menú principal, haga clic en Windows > Diálogos empotrables > Histograma

  3. Elija la herramienta Seleccionar por color Shift+ Cy establezca el Umbral en 0, en las Opciones de herramienta, en la Caja de herramientas

ingrese la descripción de la imagen aquí

  1. Haga clic en un color para seleccionarlo y el número de píxeles se mostrará en el histograma. Repita para otros colores

ingrese la descripción de la imagen aquí

Nota: Si su imagen es muy pequeña, es posible que desee acercarla. Use +y -para acercar/alejar. Si mantiene presionado Spacemientras mueve el mouse, podrá desplazarse por la imagen. También tenga en cuenta que el tablero de ajedrez gris y blanco en el ejemplo anterior es para mostrar el fondo transparente. Si su imagen tiene un fondo sólido, no los verá.

Para obtener información, hay una solución casi idéntica en Affinity Photo: habilite el histograma (Ver > Estudio > Histograma) y luego seleccione el color requerido (Seleccionar > Seleccionar color de muestra…).
@psbasdf: debe escribir una respuesta. ¡Yo lo votaría!
La respuesta es tan similar a la tuya que parece un plagio. Pero si te parece bien, lo publicaré.
@pbasdf Estoy bien con eso. No hay problema.

Basándose en gran medida en la respuesta de Billy Kerr usando Gimp, así es como puede lograr lo mismo en Affinity Photo:

Primero asegúrese de tener el panel de histograma activo y visible mediante la opción de menú Ver > Estudio > Histograma . (Es posible que deba configurar la opción Avanzado para el panel, usando el menú de hamburguesa pequeño en la parte superior derecha, para ver las estadísticas asociadas con el histograma). Asegúrese de que la opción "Marquesina" esté seleccionada, para limitar el alcance a los píxeles seleccionados .

ingrese la descripción de la imagen aquí

A continuación, utilice la opción Seleccionar > Seleccionar color de muestra.... Se mostrará un pequeño panel:

ingrese la descripción de la imagen aquí

Haga clic en su imagen para elegir el color a muestrear. Hay un control deslizante de Umbral para determinar qué tan cerca debe coincidir cada píxel para ser seleccionado. Ajuste el control deslizante para incluir/excluir los píxeles que necesita. Luego haga clic en Aplicar. El histograma y las estadísticas se actualizarán para reflejar la selección:

ingrese la descripción de la imagen aquí

En mi ejemplo, puede ver que se seleccionaron 136 píxeles. Si ve un pequeño triángulo de advertencia en la parte superior derecha del histograma (como en mi primer ejemplo), haga clic en él para forzar una actualización completa de los datos.

Repita para los otros colores. Es un poco tedioso porque tendrá que usar la opción de menú Seleccionar > Seleccionar color de muestra... cada vez.

Si tiene instalada la herramienta de línea de comandos imagemagick , puede usar el siguiente comando en la terminal *nix o OSX:

convert <filename> txt:- | cut -d " " -f 4 | uniq -c

reemplazando <filename>con el nombre de su archivo. Esto imprimirá una lista de conteos y colores hexadecimales, como:

   10 #4A413F
   14 #483E3C

Esto funciona usando la convertherramienta para convertir el archivo al formato "txt", que se compone de líneas como:

 9,0: (75,74,76)  #4B4A4C  srgb(75,74,76)

Cuáles son las coordenadas x, y, luego los valores RGB decimales, el valor hexadecimal y luego el valor srgb del píxel. Obviamente, este formato no es muy eficiente :). Escribimos esto en la salida estándar ( txt:-significa "escribir el formato txt en la salida estándar").

Luego, usamos el comando incorporado cutpara tomar la cuarta -f 4columna ( ), delimitada por espacios ( -d " "), que aquí es el valor hexadecimal (curiosamente, hay dos espacios entre el RGB decimal y el valor hexadecimal, por lo que si desea que RGB decimal, use -f 2).

Finalmente, usamos el comando incorporado uniqpara contar -clas líneas únicas e imprimirlo en la salida estándar (el terminal).

Esto es bueno porque en realidad obtienes una lista de una sola vez. Para los usuarios de Windows, hay Cygwin o WSL para proporcionar cuty uniq(puede haber equivalentes directos, o escribir un script que use imagemagick para el procesamiento de imágenes). Imagemagick también está disponible para Windows.

No pude encontrar una manera de hacer esto en Photoshop, pero hay una solución para hacerlo con Illustrator:

  1. Copie y pegue su imagen en Illustrator*;
  2. Use Objeto > Crear mosaico de objetos** con la resolución exacta de la imagen para convertirla en cuadrados separados;
  3. Use la herramienta de selección [V] y haga doble clic en el objeto para ingresar al grupo resultante;
  4. Seleccione la herramienta Varita mágica [Y] y haga doble clic en el icono de la herramienta para acceder a su configuración;
  5. Marque 'Color de relleno', establezca su Tolerancia en 1 y desmarque las otras opciones;
  6. Abra Ventana> Información del documento y abra sus opciones para marcar 'Objetos'
  7. Haga clic en un 'píxel' de color con la varita mágica para seleccionarlos todos y mostrar la cantidad total en la parte superior de la paleta Información del documento.

* Intenté colocar un .png con transparencia, y Ai se negó a mosaico, de ahí mi consejo de simplemente copiar y pegar.

** Esta pregunta tiene una descripción general de esta técnica.

El OP dijo "no sugiera nada hecho por Adobe". JAJAJA
@BillyKerr aún, la pregunta y sus respuestas en SE también son para otros futuros lectores, no solo el OP ~
En Photoshop, podría hacer algo similar a esto solo con todos los píxeles de un color seleccionado con la varita mágica.
@BillyKerr Leer es difícil , ya sabes ^^'