Schreiben Sie ein Programm, das ein Standard- Echtfarbenbild und eine einzelne 24-Bit- RGB- Farbe (drei Zahlen von 0 bis 255) aufnimmt . Ändern Sie das Eingabebild (oder geben Sie ein neues Bild mit denselben Abmessungen aus), sodass die durchschnittliche Farbe genau der einzelnen eingegebenen Farbe entspricht. Sie können die Pixel im Eingabebild beliebig ändern, um dies zu erreichen. Ziel ist es jedoch, die Farbänderungen so wenig wie möglich sichtbar zu machen .
Die durchschnittliche Farbe eines RGB-Bildes setzt sich aus drei arithmetischen Mitteln zusammen , eines für jeden Farbkanal. Der durchschnittliche Rotwert ist die Summe der Rotwerte aller Pixel im Bild geteilt durch die Gesamtzahl der Pixel (Bildbereich), abgerundet auf die nächste Ganzzahl. Der grüne und der blaue Durchschnitt werden auf die gleiche Weise berechnet.
Dieses Python 2- Skript (mit PIL ) kann die durchschnittliche Farbe der meisten Bilddateiformate berechnen:
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)
(Es gibt ähnliche durchschnittliche Farbprogramme hier , aber sie müssen nicht genau die gleiche Berechnung tun.)
Die Hauptanforderung für Ihr Programm besteht darin, dass für jedes Eingabebild die durchschnittliche Farbe der entsprechenden Ausgabe genau mit der eingegebenen Farbe übereinstimmen muss. Dies wird anhand des Python-Snippets oder eines entsprechenden Codes beurteilt. Das Ausgabebild muss genau die gleichen Abmessungen wie das Eingabebild haben.
Sie könnten also technisch ein Programm einreichen, das einfach die gesamte Eingabe mit der angegebenen Durchschnittsfarbe einfärbt (weil der Durchschnitt immer diese Farbe sein würde), aber dies ist ein Beliebtheitswettbewerb - die Einreichung mit der höchsten Stimmenzahl gewinnt und eine solche Kleinigkeit Einreichung wird Ihnen nicht viele positive Stimmen einbringen. Neuartige Ideen wie das Ausnutzen von Macken in der menschlichen Sicht oder das Verkleinern des Bildes und das Zeichnen eines farbigen Rahmens werden (hoffentlich) zu Abstimmungen führen.
Beachten Sie, dass bestimmte Kombinationen von Durchschnittsfarben und Bildern äußerst auffällige Farbänderungen erfordern. Wenn zum Beispiel die zu vergleichende Durchschnittsfarbe schwarz (0, 0, 0) wäre, müsste jedes Eingabebild vollständig schwarz gemacht werden, denn wenn Pixel Werte ungleich Null hätten, würden sie auch den Durchschnittswert ungleich Null machen ( Rundungsfehler vorbehalten). Beachten Sie diese Einschränkungen bei der Abstimmung.
Bilder testen
Einige Bilder und ihre durchschnittlichen Standardfarben zum Herumspielen. Klicken Sie für volle Größen.
A. Durchschnitt (127, 127, 127)
Von fejesjoco ‚s Bilder mit allen Farben beantworten . Gefunden Original auf seinem Blog .
B. durchschnittlich (62, 71, 73)
Yokohama . Bereitgestellt von Geobits .
C. Durchschnitt (115, 112, 111)
Tokio . Bereitgestellt von Geobits .
D. Durchschnitt (154, 151, 154)
Eschers Wasserfall . Original .
E. Durchschnitt (105, 103, 102)
Mount Shasta . Von mir bereitgestellt.
F. Durchschnitt (75, 91, 110)
Anmerkungen
- Die genauen Eingabe- und Ausgabeformate und Bilddateitypen, die Ihr Programm verwendet, spielen keine große Rolle. Stellen Sie einfach sicher, dass klar ist, wie Sie Ihr Programm verwenden.
- Es ist wahrscheinlich eine gute Idee (aber technisch keine Voraussetzung), dass ein Bild, wenn es bereits die durchschnittliche Zielfarbe hat, so ausgegeben wird, wie es ist.
- Stellen Sie Testbilder mit einem durchschnittlichen Farbeintrag als (150, 100, 100) oder (75, 91, 110) bereit, damit die Wähler dieselben Eingaben für verschiedene Lösungen sehen können. (Das Posten von mehr Beispielen ist in Ordnung, sogar erwünscht.)