Cor média de uma imagem
Os cientistas conseguiram determinar a cor média do universo, mas em quantos bytes podemos encontrar a cor média em uma imagem?
Sua tarefa
Sua entrada será uma imagem única, na qual você precisará encontrar a média das cores na imagem e gerar uma sequência de cores hexadecimal ( #??????
). A imagem pode ter qualquer um dos seguintes formatos
- JPEG / JFIF
- JPEG 2000
- TIFF
- GIF
- BMP
- PNG
- PNM
- PPM
A entrada também pode ser tomada como um URL / URI para a imagem.
Funções embutidas que calculam médias ou mostram a imagem de uma só vez, como ImageMeasurements
não são permitidas.
Exemplos
Os resultados variam um pouco, dependendo de como você calcula a média e de quais modelos de cores você usa. Adicionei valores RGB e LCH (HSV) para as imagens abaixo.
saída: #53715F
RGB, também pode ser #3B7D3D
LCH (HSV)
saída: #8B7D41
RGB, #96753C
LCH (HSV)
fonte
95.6...
, para o qual você arredondou95
na saída especificada.Respostas:
Pitão -
2322191816 bytesTranspõe para obter todos os canais, soma, divide e hexifica cada um. Conclui concatenando e anexando a
#
.Leva um nome de arquivo de imagem (qualquer tipo) de stdin e gera para stdout. MUITO LENTO .
Amostra de execução
fonte
PIL
biblioteca para manipular imagens. Procure aqui a fonte exata.Bash, 46 bytes
O ImageMagick dimensiona a imagem para um pixel que contém a média das cores na imagem e a gera como texto.
fonte
MATLAB - 68 bytes
A imagem é lida com
imread
combinada comuigetfile
para abrir uma GUI para escolher a imagem que você deseja carregar. A suposição com este código é que todas as imagens são RGB e, para calcular a cor média, somamos cada canal individualmente e depois dividimos por quantos elementos houver em um canal, que é o número total de pixels na imagem RGB ( ) dividido por 3. Como a média pode gerar valores de ponto flutuante, é necessária uma chamada para arredondar o número para zero . combinado com a sequência de formatação hexadecimal ( ) é usado para imprimir cada valor inteiro na média em seu equivalente hexadecimal. No entanto, existe para garantir que um 0 extra seja preenchido à esquerda, caso o valor médio de qualquer canal seja menor que 16numel
(I)
fix
sprintf
%x
02
* .Execuções de amostra
O legal
imread
é que você pode ler imagens diretamente de URLs. Como um exemplo reproduzível, vamos supor que você baixou as imagens no seu computador e executou o código acima ... mas para demonstração, vou ler as imagens diretamente do Code Golf:Primeira imagem
Segunda imagem
* Nota: este foi um esforço colaborativo feito pelos usuários do StackOverflow na sala de bate-papo MATLAB e Octave .
fonte
CJam, 27 bytes
Isso leu uma imagem PPM do STDIN.
Como o CJam não possui processamento de imagem embutido, esse código espera um PixMap portátil ASCII (número mágico P3) com uma paleta completa de 24 bits (valor máximo 255) e sem comentários.
Execução de teste
Como funciona
fonte
HTML5 + JavaScript (ES6), 335 bytes
Isso não vai ganhar, mas eu me diverti fazendo isso de qualquer maneira.
Usa a API do Canvas em HTML5 . Entrada é um URL de uma imagem ativada para CORS .
Demo
Como é o ES6, atualmente só funciona no Firefox e Edge.
fonte
new Image
comImage()
?TypeError: Constructor Image requires 'new'
W='width'
eH='height'
usari[H]
oui[W]
Python [3] + SciPy,
144133121Carrega dados de pixel, somas para cada canal, divide por tamanho *, formatos. Os valores são arredondados para zero.
* tamanho = largura * altura * canais, multiplicado por 3
fonte
input()
para seguir o caminho? Economizará 20 bytes.import scipy
. Mudem.imread
paramisc.imread
.NameError: name 'misc' is not defined
,. Tenteifrom scipy import*
, também não funciona.from scipy import sum, misc as m
? Você salva quando usa soma também.R, 90 bytes
O caminho para o arquivo PNG é lido no STDIN. O pacote
png
precisa ser instalado.Passo a passo:
fonte
C, 259 bytes
Toma um arquivo PPM sem comentários .
Processo
Código inicial:
Apare variáveis e remova o loop:
A partir daí, combinei as várias declarações em uma única declaração de retorno. Removido e qualquer outra informação de tipo estranho, renomeado variáveis e cortando o espaço em branco.
fonte
Cobra - 371
fonte
Java,
449447446430426 bytesGraças a esta resposta, no estouro da pilha, o
String.format
truque.fonte