Este é simples de descrever e eu mal podia acreditar que isso não acontecesse antes:
Para uma determinada imagem (seja qual for o formato suportado pelo seu idioma), localize as cores exclusivas e produza uma lista das cores.
- Imprima o código de cor em RGB hexadecimal, que é um sinal de hash
#
seguido de 2 dígitos para R, 2 dígitos para G e 2 dígitos para B. (#xxxxxx
onde x pode ser 0-9, AF e / ou af). - O código hexadecimal deve ser seguido por um espaço
e a contagem decimal de pixels, depois uma nova linha (
\n
ou\r\n
). - A lista deve ser classificada por contagem decrescente (cor mais frequente na parte superior).
- Se houver um empate (duas cores com a mesma quantidade), o pedido não é importante.
- A imagem não conterá transparência; portanto, qualquer valor alfa não é importante. O valor alfa pode não fazer parte da saída.
- Um tamanho de imagem de 4000x3000 deve ser suportado (isso pode importar para digitar definições)
Imagem de amostra "10red 20blue 30black 40white":
Saída esperada:
#FFFFFF 40
#000000 30
#0000FF 20
#FF0000 10
Imagem de exemplo "gradiente azul":
Uma das saídas esperadas (já que a ordem das mesmas cores pode 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
Imagem de exemplo "testImage", gentilmente fornecida por @Luis Mendo :
Saída esperada:
#FFFFFF 18042
#000000 1754
#FF3300 204
Semelhante a esta pergunta , mas a saída é texto, não uma imagem.
code-golf
image-processing
color
Thomas Weller
fonte
fonte
count descending
é um pouco incerto. Como nós classificamos isso?the most frequent colors at the top
?Respostas:
Mathematica, 91 bytes
Usa um método completamente diferente da resposta do @ DavidC . Ao contrário desse, isso pode suportar imagens com qualquer tamanho e contagem de cores. Explicação:
fonte
Bash + coreutils, 54
Isso pressupõe a entrada STDIN do formato .txt do Imagemagick .
Ideone.
Se o formato de entrada acima for muito exagerado, podemos adicionar a conversão Imagemagick de qualquer formato:
Bash + coreutils + Imagemagick, 71
Aqui, o nome do arquivo da imagem de entrada é passado como um parâmetro da linha de comandos.
fonte
,
awk
parte:awk '$0=$2" "$1'
.JavaScript (ES6),
359355 bytesGuardado 4 bytes graças a @Neil
Demo
Outros casos de teste que enviei ao imgur para dar suporte ao CORS:
Os dados de cores específicos desses dois parecem ter mudado levemente durante o upload por algum motivo, mas ainda imprimem a mesma quantidade de ocorrências para esses dois casos de teste.
fonte
|
tem precedência mais baixa do que<<
isso, se você usá-lo, em vez de+
não precisar de tantos()
s.<!-- language: lang-js -->
do snippet, desativando efetivamente o 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]))}}
Pitão , 29 bytes
Experimente online!
(O intérprete on-line não pode ler a imagem, então tirei essa parte e inseri o resultado da leitura dessa imagem, que é uma lista de trigêmeos de cores. A parte responsável pela leitura da imagem é
'
um único cólon.)Prova de funcionalidade de
'
um único cólonfonte
s
antes'Q
, pois uma imagem é representada como lista de listas de trigêmeos.V_SrS%L+\#*3"%02X"s'z8jd_N
Mathematica
10392 bytesExemplo
Explicação
DominantColors
normalmente retorna uma lista de cores e conta representando os principais grupos em uma imagem. Quando o número de cores solicitadas excede o número de cores na imagem, as cores exatas dos pixels são retornadas. (Suponho que menos de 10.000 cores estarão na imagem de entrada.){"#"<>IntegerString[255Round[List@@#],16,2],#2}
converte os valores de cores da base 10 com valores hexadecimais.Nota: existem apenas 5 cores na imagem do mandril. (Eu costumava
ColorQuantize[<image>,5]
reduzir o número de cores na imagem padrão do mandril.)fonte
PowerShell v2 +, 187 bytes
Reutiliza quase todo o código da minha resposta em Obter a cor mais dominante . Portanto, consulte isso para obter uma explicação completa.
As mudanças aqui são na indexação
$b
na terceira linha para corresponder às exigências de formato de saída explícitas, e na última linha quesort
porvalue
em-des
ordem cending, então pipe paraFormat-Table
com-H
ideTableHeaders e-A
utoSize como parâmetros. É muito raro usarFT
aqui no PPCG, pois a saída está implícita no final da execução, mas aqui é muito útil garantir que obtemos apenas a saída correta das peças.Exemplos
A primeira é a imagem de teste "vermelha" do desafio Cor Dominante, a segunda é a "imagem de teste" desse desafio.
fonte
Tcl / Tk , 134 bytes
d
é paradata
.Tcl / Tk , 232 bytes
wish sort_pix.tcl QTE4O.png
wish sort_pix.tcl 5s1Ob.png
wish sort_pix.tcl z07VA.gif
fonte
Brain-Flak , 1110 bytes
Experimente online!
Bem, isso foi uma aventura. Acontece que o Brain-Flak não é muito bom no processamento de imagens. Quem sabia?
Começarei observando que isso tecnicamente não atende ao formato de saída estrito solicitado. Se você deseja que isso seja aplicado, avise-me e tentarei adicionar o código de tradução. Por enquanto, ele gera números decimais: cada 4 números representa uma cor na ordem RED GREEN BLUE COUNT.
Em seguida, entrada. Os formatos de entrada permitidos eram mais flexíveis, então usei o formato mais fácil para o Brain-Flak analisar (que eu consegui encontrar): Netpbm P6. Infelizmente, o Brain-Flak não pôde analisar números decimais no formato P3 porque todas as imagens Netpbm começam com o caractere
P
e o Brain-Flak não pode manipular a entrada decimal de arquivos que contêm caracteres não numéricos. Portanto, o P6 foi usado, porque o P6 armazena informações de cores como bytes, que são tratados como números no modo de entrada ASCII. Permaneceu um desafio porque as informações do cabeçalho não foram codificadas de maneira útil, mas, felizmente, eu não precisava de nenhuma dessas informações, portanto elas foram descartadas. Este programa não adere totalmente ao padrão Netpbm porque não permite novas linhas dentro do cabeçalho, mas as novas linhas não sãorequerido pelo padrão para que as entradas sejam arquivos Netpbm válidos.Na última advertência, a versão no TIO não está configurada corretamente para operação "oficial" porque (que eu saiba) não posso fornecer arquivos como entrada no TIO, nem poderia fornecer bytes correspondentes a ASCII imprimível na entrada direta. Para operação oficial, o
-a
sinalizador é necessário para receber dados como bytes não processados e-f
para obter dados de um arquivo. A entrada de amostra no link TIO foi traduzida manualmente a partir do exemplo na página wiki do Netpbm .Além disso, gostaria de agradecer ao wiki do Brain-Flak por fornecer trechos úteis de código para trabalhar. Em particular, a implementação do Bubble-Sort aqui foi fundamental para a etapa final, uma vez que eu obtive uma contagem de todas as cores, já que eu realmente não tinha idéia de por onde começar. Foram necessárias modificações pesadas, mas estou feliz por não precisar começar do zero.
Aqui está a versão não codificada e comentada do código. O Brain-Flak é um pouco detalhado demais para incluir uma explicação útil e formatada neste post, mas a versão não-gasta no TIO contém tudo o que eu incluiria em uma com melhor formatação do que eu poderia gerenciar aqui; portanto, se você estiver interessado, faça um Veja.
Talvez ainda não haja golfe, minha resposta anterior ao Brain-Flak passou por muitas revisões, mas, esperançosamente, as lições aprendidas ali deram a isso um melhor ponto de partida.
fonte
Python 2, 186 bytes
Experimente online!
Isenção de responsabilidade: As saídas apresentadas são de uma linha para facilitar a leitura. As saídas de código resultam em separação de espaço e linha, conforme solicitado pelo desafio.
Saída para 10red 20blue 30black 40white:
Ouput para gradiente azul:
Saída para imagem de teste
Explicação:
fonte
Java (1.4+) ,
483428 bytesExperimente online!(Não funciona online)Ungolfed:
O
toString()
mapa de resultados como este:Por favor, não poste 1,8 sugestões específicas de golfe, a menos que funcione em Java mais antigo, não quero.
Exemplo: Lambdas não funcionam em mais versões do Java do que em.
fonte
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
era mais inteligente que uma importação estática.SmileBASIC, 165 bytes
A imagem é fornecida como uma matriz de valores de cores ARGB de 32 bits (o valor alfa é cortado quando o número é convertido em uma sequência hexadecimal de 6 dígitos)
fonte