Scrivi un programma che includa un'immagine truecolor standard e un singolo colore RGB a 24 bit (tre numeri da 0 a 255). Modifica l'immagine in ingresso (o in uscita una nuova immagine con le stesse dimensioni) in modo che il suo colore medio sia esattamente il colore singolo che è stato inserito. Puoi modificare i pixel nell'immagine di input in qualsiasi modo ti piaccia, ma l'obiettivo è quello di rendere i cambiamenti di colore visivamente il più impercettibili possibile .
Il colore medio di un'immagine RGB è in realtà un insieme di tre mezzi aritmetici , uno per ciascun canale di colore. Il valore rosso medio è la somma dei valori rossi su tutti i pixel dell'immagine divisa per il numero totale di pixel (l'area dell'immagine), arrotondato per difetto all'intero più vicino. Le medie verde e blu sono calcolate allo stesso modo.
Questo script Python 2 (con PIL ) può calcolare il colore medio della maggior parte dei formati di file immagine:
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)
(Esistono programmi di colore medio simili qui , ma non eseguono necessariamente lo stesso calcolo esatto.)
Il requisito principale per il tuo programma è che per qualsiasi immagine di input, il colore medio dell'output corrispondente deve corrispondere esattamente al colore che è stato immesso, come giudicato dallo snippet di Python o da un codice equivalente. L'immagine di output deve inoltre avere le stesse dimensioni dell'immagine di input.
Quindi potresti tecnicamente inviare un programma che colora semplicemente l'intero input del colore medio specificato (perché la media sarebbe sempre quel colore), ma questo è un concorso di popolarità - vincerà l'invio con il maggior numero di voti e un tale banale l'invio non ti darà molti voti. Nuove idee come sfruttare le stranezze nella visione umana, o ridurre l'immagine e tracciare un bordo colorato attorno ad essa (si spera) otterranno voti.
Si noti che alcune combinazioni di colori e immagini medi richiedono cambiamenti di colore estremamente evidenti. Ad esempio, se il colore medio da abbinare fosse nero (0, 0, 0), qualsiasi immagine di input dovrebbe essere resa completamente nera perché se qualsiasi pixel avesse valori diversi da zero, renderebbe anche il valore medio diverso da zero ( salvo errori di arrotondamento). Tenere presenti tali limiti durante il voto.
Immagini di prova
Alcune immagini e i loro colori medi predefiniti con cui giocare. Clicca per dimensioni intere.
A. media (127, 127, 127)
Da fejesjoco 's immagini con tutti i colori rispondono . Trovato originale sul suo blog .
B. media (62, 71, 73)
Yokohama . Fornito da Geobits .
Media C. (115, 112, 111)
D. media (154, 151, 154)
Cascata di Escher . Originale .
E. media (105, 103, 102)
Monte Shasta . Fornito da me.
F. media (75, 91, 110)
Appunti
- Gli esatti formati di input e output e i tipi di file immagine utilizzati dal tuo programma non contano molto. Assicurati solo che sia chiaro come usare il tuo programma.
- Probabilmente è una buona idea (ma non tecnicamente un requisito) che se un'immagine ha già il colore medio obiettivo, dovrebbe essere prodotta così com'è.
- Pubblica le immagini di prova con input di colore medio come (150, 100, 100) o (75, 91, 110), in modo che gli elettori possano vedere gli stessi input in soluzioni diverse. (Pubblicare più esempi di questo va bene, anche incoraggiato.)