Este es simple de describir y apenas podía creer que esto no se hubiera jugado antes:
Para una imagen determinada (cualquier formato que sea compatible con su idioma), busque los colores únicos y envíe una lista de los colores.
- Imprima el código de color en RGB hexadecimal, que es un signo hash
#
seguido de 2 dígitos para R, 2 dígitos para G y 2 dígitos para B. (#xxxxxx
donde x puede ser 0-9, AF y / o af). - El código hexadecimal irá seguido de un espacio
y el recuento de píxeles decimales, luego una nueva línea (
\n
o\r\n
). - La lista se ordenará por conteo descendente (el color más frecuente en la parte superior).
- Si hay un empate (dos colores con la misma cantidad), el orden no es importante.
- La imagen no contendrá transparencia, por lo que cualquier valor alfa no es importante. El valor alfa puede no ser parte de la salida.
- Se debe admitir un tamaño de imagen de 4000x3000 (que puede ser importante para escribir definiciones)
Imagen de muestra "10red 20blue 30black 40white":
Rendimiento esperado:
#FFFFFF 40
#000000 30
#0000FF 20
#FF0000 10
Imagen de muestra "gradiente azul":
Una de las salidas esperadas (ya que el orden de los mismos colores puede variar):
#718DFF 19
#5571FF 15
#3855FF 11
#8DAAFF 11
#1C38FF 7
#AAAAFF 7
#8D8DFF 6
#AAC6FF 6
#C6C6FF 5
#C6E2FF 4
#001CFF 3
#E2E2FF 3
#FFFFFF 3
Imagen de muestra "testImage", amablemente proporcionada por @Luis Mendo :
Rendimiento esperado:
#FFFFFF 18042
#000000 1754
#FF3300 204
Similar a esta pregunta , pero el resultado es texto, no una imagen.
code-golf
image-processing
color
Thomas Weller
fuente
fuente
count descending
Es un poco confuso. ¿Cómo lo solucionamos?the most frequent colors at the top
?Respuestas:
Mathematica, 91 bytes
Utiliza un método completamente diferente de la respuesta de @ DavidC . A diferencia de ese, esto puede admitir imágenes con cualquier tamaño y color. Explicación:
fuente
Bash + coreutils, 54
Esto supone la entrada STDIN del formato .txt de Imagemagick .
Ideona
Si el formato de entrada anterior es demasiado extenso, entonces podemos agregar la conversión de Imagemagick desde cualquier formato:
Bash + coreutils + Imagemagick, 71
Aquí, el nombre de archivo de la imagen de entrada se pasa como un parámetro de línea de comandos.
fuente
,
awk
parte:awk '$0=$2" "$1'
.JavaScript (ES6),
359355 bytesGuardado 4 bytes gracias a @Neil
Manifestación
Otros casos de prueba que cargué en imgur para admitir CORS:
Los datos de color específicos en estos dos parecen haber cambiado ligeramente al cargarlos por alguna razón, pero aún imprime la misma cantidad de ocurrencias para esos dos casos de prueba.
fuente
|
tiene menor prioridad que<<
si lo usas en lugar de+
eso, no necesitarás tantos()
s.<!-- language: lang-js -->
del fragmento, deshabilitando efectivamente el JavaScript.u=>{document.write`<img src=${u} id=i><canvas id=e>`;c=e.getContext`2d`;i.onload=_=>{w=e.width=i.width;h=e.height=i.height;c.drawImage(i,0,0);d=c.getImageData(0,0,w,h).data;for(o={},i=0;i<d.length;i+=4)++o[s='#'+`00000${(d[i]<<16|d[i+1]<<8|d[i+2]).toString(16)} `.slice(-7)]?0:o[s]=1;Object.keys(o).sort((a,b)=>o[b]-o[a]).map(c=>console.log(c+o[c]))}}
Pyth , 29 bytes
Pruébalo en línea!
(El intérprete en línea no puede leer la imagen, por lo que eliminé esa parte e ingresé el resultado de la lectura de esa imagen, que es una lista de tripletes de colores. La parte responsable de leer la imagen es
'
un solo colon).Prueba de funcionalidad de
'
un solo colonfuente
s
antes'Q
, ya que una imagen se representa como una lista de listas de trillizos.V_SrS%L+\#*3"%02X"s'z8jd_N
Mathematica
10392 bytesEjemplo
Explicación
DominantColors
normalmente devuelve una lista de colores y recuentos que representan los grupos principales en una imagen. Cuando el número de colores solicitados excede el número de colores en la imagen, se devuelven los colores de píxeles exactos. (Supongo que habrá menos de 10 000 colores en la imagen de entrada).{"#"<>IntegerString[255Round[List@@#],16,2],#2}
convierte los valores de color base 10 con valores hexadecimales.Nota: solo hay 5 colores en la imagen del mandril. (Solía
ColorQuantize[<image>,5]
reducir la cantidad de colores en la imagen estándar del mandril).fuente
PowerShell v2 +, 187 bytes
Reutiliza casi todo el código de mi respuesta en Obtener el color más dominante . Por lo tanto, haga referencia a eso para obtener una explicación completa.
Los cambios aquí están en la indexación
$b
en la tercera línea para que coincida con los requisitos de formato de salida explícitas, y en la última línea quesort
porvalue
en-des
orden cending, a continuación, canalizar aFormat-Table
la-H
ideTableHeaders y-A
utoSize como parámetros. Es muy raro usarlo realmenteFT
aquí en PPCG, ya que la salida está implícita al final de la ejecución, pero aquí es muy útil para garantizar que obtengamos solo la salida correcta de las partes.Ejemplos
La primera es la imagen de prueba "roja" del desafío Color dominante, la segunda es la "imagen de prueba" de este desafío.
fuente
Tcl / Tk , 134 bytes
d
es paradata
.Tcl / Tk , 232 bytes
wish sort_pix.tcl QTE4O.png
wish sort_pix.tcl 5s1Ob.png
wish sort_pix.tcl z07VA.gif
fuente
Brain-Flak , 1110 bytes
Pruébalo en línea!
Bueno, eso fue una aventura. Resulta que Brain-Flak no es muy bueno en el procesamiento de imágenes. ¿Quien sabe?
Comenzaré señalando que esto técnicamente no cumple con el formato de salida estricto solicitado. Si quiere que se cumpla, hágamelo saber e intentaré agregar el código de traducción. Por ahora genera números decimales: cada 4 números representa un color en el orden ROJO VERDE AZUL CONTEO.
A continuación, entrada. Los formatos de entrada permitidos eran más flexibles, por lo que utilicé el formato más fácil para que Brain-Flak analizara (que pude encontrar): Netpbm P6. Desafortunadamente, Brain-Flak no pudo analizar los números decimales del formato P3 porque todas las imágenes de Netpbm comienzan con el carácter
P
y Brain-Flak no puede manejar la entrada decimal de archivos que contienen caracteres no numéricos. Por lo tanto, se usó P6, porque P6 almacena información de color como bytes, que se tratan como números en el modo de entrada ASCII. Quedaba un desafío porque el estándar requería la información del encabezado, por lo que las entradas son archivos Netpbm válidos. no codificada de manera útil, pero afortunadamente no necesitaba ninguna de esa información, por lo que simplemente se descarta. Este programa no se adhiere completamente al estándar Netpbm porque no permite líneas nuevas dentro del encabezado, pero las líneas nuevas no sonÚltima advertencia, la versión en TIO en realidad no está configurada correctamente para la operación "oficial" porque (que yo sepa) no puedo suministrar archivos como entrada en TIO, ni podría suministrar bytes correspondientes a ASCII no imprimible en la entrada directa. Para la operación oficial, el
-a
indicador es necesario para tomar la entrada como bytes sin procesar y-f
para tomar la entrada de un archivo. En cambio, la entrada de muestra en el enlace TIO se tradujo manualmente del ejemplo en la página wiki de Netpbm .Además, me gustaría agradecer al wiki de Brain-Flak por proporcionar fragmentos útiles de código para trabajar. En particular, la implementación de Bubble-Sort aquí fue instrumental para el paso final una vez que obtuve un recuento para cada color, ya que realmente no tenía idea de por dónde empezar. Se requirió una gran modificación, pero me alegro de no tener que comenzar desde cero.
Aquí está la versión no codificada y comentada del código. Brain-Flak es demasiado detallado para incluir una explicación formateada de manera útil en esta publicación, pero la versión no protegida de TIO contiene todo lo que incluiría en uno con mejor formato del que podría manejar aquí, así que si está interesado, tome un Mira.
Puede que todavía haya golf por hacer, mi respuesta anterior de Brain-Flak pasó por muchas revisiones, pero espero que las lecciones aprendidas allí le hayan dado un mejor punto de partida.
fuente
Python 2, 186 bytes
Pruébalo en línea!
Descargo de responsabilidad: los resultados presentados son de una sola línea para facilitar la lectura. Las salidas de código resultan con separación de espacio y línea según lo solicitado por desafío.
Salida para 10red 20blue 30black 40white:
Salida para gradiente azul:
Salida para imagen de prueba
Explicación:
fuente
Java (1.4+) ,
483428 bytesPruébalo en línea!(No funciona en línea)Sin golf:
La
toString()
salida del mapa es así:No publique 1.8 sugerencias de golf específicas, a menos que funcione en Java más antiguo, no quiero.
Ejemplo: Lambdas no funciona en más versiones de Java de las que funcionan.
fuente
import java.util.*;class M{public static void main(String[]a)throws Exception{java.awt.image.BufferedImage i=javax.imageio.ImageIO.read(new java.io.File(a[0]));Map m=new HashMap();String s;for(Integer x=0,y=0,c;y<i.getHeight();y++)for(x=0;x<i.getWidth();m.put(s=x.toHexString((c&0xff0000)>>16)+x.toHexString((c&0xff00)>>8)+x.toHexString(c&0xff),m.get(s)==null?1:(int)m.get(s)+1))c=i.getRGB(x++,y);System.out.print(m);}}
( 419 bytes )x.toHexInteger
fue más inteligente que una importación estática.SmileBASIC, 165 bytes
La imagen se proporciona como una matriz de valores de color ARGB de 32 bits (el valor alfa se recorta cuando el número se convierte en una cadena hexadecimal de 6 dígitos)
fuente