Escreva um programa que capte uma imagem truecolor padrão e uma única cor RGB de 24 bits (três números de 0 a 255). Modifique a imagem de entrada (ou produza uma nova imagem com as mesmas dimensões) para que sua cor média seja exatamente a única cor que foi inserida. Você pode modificar os pixels na imagem de entrada da maneira que desejar, mas o objetivo é fazer com que as alterações de cores sejam visualmente imperceptíveis quanto possível .
A cor média de uma imagem RGB é realmente um conjunto de três médias aritméticas , uma para cada canal de cores. O valor médio vermelho é a soma dos valores vermelhos em todos os pixels da imagem divididos pelo número total de pixels (a área da imagem), arredondados para o número inteiro mais próximo. As médias verde e azul são calculadas da mesma maneira.
Este Python 2 script (com PIL ) pode calcular a cor média da maioria dos formatos de arquivo de imagem:
from PIL import Image
print 'Enter image file'
im = Image.open(raw_input()).convert('RGB')
pixels = im.load()
avg = [0, 0, 0]
for x in range(im.size[0]):
for y in range(im.size[1]):
for i in range(3):
avg[i] += pixels[x, y][i]
print 'The average color is', tuple(c // (im.size[0] * im.size[1]) for c in avg)
(Existem programas de cores médios semelhantes aqui , mas eles não fazem exatamente o mesmo cálculo.)
O principal requisito para o seu programa é que, para qualquer imagem de entrada, a cor média da saída correspondente deva corresponder exatamente à cor que foi inserida - conforme julgado pelo snippet do Python ou algum código equivalente. A imagem de saída também deve ter exatamente as mesmas dimensões da imagem de entrada.
Assim, você pode enviar tecnicamente um programa que simplesmente colore toda a entrada com a cor média especificada (porque a média sempre seria essa cor), mas esse é um concurso de popularidade - a submissão com o maior número de votos vencerá , e é tão trivial a submissão não recebe muitos votos positivos. Novas idéias, como tirar proveito das peculiaridades da visão humana, ou diminuir a imagem e desenhar uma borda colorida em torno dela (espero), você recebe votos.
Observe que certas combinações de cores e imagens comuns exigem alterações de cor extremamente visíveis. Por exemplo, se a cor média a combinar fosse preta (0, 0, 0), qualquer imagem de entrada precisaria ser totalmente preta, pois se algum pixel tivesse valores diferentes de zero, também tornaria a média diferente de zero ( exceto erros de arredondamento). Lembre-se de tais limitações ao votar.
Imagens de teste
Algumas imagens e suas cores médias padrão para brincar. Clique para ver os tamanhos completos.
A. média (127, 127, 127)
De fejesjoco 's Imagens com todas as cores responder . Original encontrado em seu blog .
B. média (62, 71, 73)
Yokohama . Fornecido por Geobits .
C. média (115, 112, 111)
Tóquio . Fornecido por Geobits .
D. média (154, 151, 154)
Cachoeira de Escher . Original .
E. média (105, 103, 102)
Monte Shasta . Fornecido por mim.
F. média (75, 91, 110)
Notas
- Os formatos exatos de entrada e saída e os tipos de arquivo de imagem usados pelo seu programa não importam muito. Apenas verifique se está claro como usar seu programa.
- Provavelmente, é uma boa ideia (mas não tecnicamente um requisito) que, se uma imagem já tiver a cor média da meta, ela deve ser impressa como está.
- Poste imagens de teste com a entrada de cores média como (150, 100, 100) ou (75, 91, 110), para que os eleitores possam ver as mesmas entradas em diferentes soluções. (Publicar mais exemplos do que este é bom, até incentivado.)