Napisz program, który pobierze standardowy obraz truecolor i pojedynczy 24-bitowy kolor RGB (trzy liczby od 0 do 255). Zmodyfikuj obraz wejściowy (lub wydrukuj nowy obraz o takich samych wymiarach), aby jego średni kolor był dokładnie tym samym kolorem, który został wprowadzony. Możesz modyfikować piksele na obrazie wejściowym w dowolny sposób, aby to osiągnąć, ale celem jest, aby zmiany kolorów były jak najbardziej niezauważalne wizualnie .
Średni kolor z obrazu RGB jest naprawdę zestaw trzech średnie arytmetyczne , po jednym dla każdego kanału koloru. Średnia wartość czerwieni to suma wartości czerwieni we wszystkich pikselach na obrazie podzielona przez całkowitą liczbę pikseli (obszar obrazu), zaokrągloną w dół do najbliższej liczby całkowitej. Średnie zielone i niebieskie oblicza się w ten sam sposób.
Ten skrypt Python 2 (z PIL ) może obliczyć średni kolor większości formatów plików graficznych:
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)
(Istnieją podobne programy średni kolor tutaj , ale nie koniecznie zrobić dokładnie te same obliczenia.)
Głównym wymaganiem dla twojego programu jest to, że dla każdego obrazu wejściowego średni kolor odpowiadającego mu wyjścia musi dokładnie odpowiadać kolorowi, który został wprowadzony - zgodnie z oceną fragmentu kodu Python lub innego równoważnego kodu. Obraz wyjściowy musi również mieć dokładnie takie same wymiary jak obraz wejściowy.
Więc możesz technicznie przesłać program, który po prostu pokoloruje całe wejście określonym średnim kolorem (ponieważ średnia zawsze będzie tym kolorem), ale jest to konkurs popularności - wygrywa zgłoszenie z największą liczbą głosów , a takie banalne zgłoszenie nie zapewni Ci wielu pozytywnych opinii. Nowatorskie pomysły, takie jak wykorzystywanie dziwactw w ludzkim widzeniu lub zmniejszanie obrazu i rysowanie wokół niego kolorowej ramki, (mam nadzieję) przyniosą ci głosy.
Należy pamiętać, że niektóre kombinacje średnich kolorów i obrazów wymagają wyjątkowo zauważalnych zmian kolorów. Na przykład, jeśli przeciętnym pasującym kolorem był czarny (0, 0, 0), każdy obraz wejściowy musiałby być całkowicie czarny, ponieważ jeśli jakiekolwiek piksele miałyby wartości niezerowe, to również uczyniłyby średnią niezerową ( blokujące błędy zaokrąglania). Pamiętaj o takich ograniczeniach podczas głosowania.
Testuj obrazy
Niektóre obrazy i ich domyślne średnie kolory do zabawy. Kliknij, aby zobaczyć pełne rozmiary.
A. średnia (127, 127, 127)
Od fejesjoco „s Obrazy z wszystkich kolorach odpowiedzieć . Znaleziono oryginał na jego blogu .
B. średnia (62, 71, 73)
Jokohama . Dostarczone przez Geobits .
C. średnia (115, 112, 111)
Tokio . Dostarczone przez Geobits .
D. średnia (154, 151, 154)
Wodospad Eschera . Oryginalna .
E. średnia (105, 103, 102)
Góra Shasta . Dostarczone przeze mnie.
F. średnia (75, 91, 110)
Uwagi
- Dokładne formaty wejściowe i wyjściowe oraz typy plików obrazów używanych przez program nie mają większego znaczenia. Tylko upewnij się, że jest jasne, jak korzystać z programu.
- Prawdopodobnie dobrym pomysłem (ale nie wymaganiem technicznym) jest to, że jeśli obraz ma już średnią docelową barwę, powinien zostać wydrukowany w niezmienionej postaci.
- Proszę zamieścić zdjęcia testowe ze średnią ilością kolorów jako (150, 100, 100) lub (75, 91, 110), aby wyborcy mogli zobaczyć te same dane wejściowe w różnych rozwiązaniach. (Publikowanie większej liczby przykładów jest w porządku, nawet zalecane).