Напишите программу , которая принимает в стандартных полноцветный изображениях и одного 24-битного RGB цвета (три числа от 0 до 255). Измените входное изображение (или выведите новое изображение с такими же размерами), чтобы его средний цвет был точно единственным цветом, который был введен. Вы можете изменить пиксели во входном изображении любым удобным для вас способом, но цель состоит в том, чтобы сделать цветовые изменения настолько визуально незаметными, насколько это возможно .
Средний цвет из RGB изображений действительно набор из трех средних арифметических , по одному для каждого цветового канала. Среднее значение красного является суммой значений красного для всех пикселей изображения, разделенных на общее количество пикселей (область изображения), округленное до ближайшего целого числа. Зеленые и синие средние рассчитываются одинаково.
Этот скрипт Python 2 (с PIL ) может вычислить средний цвет большинства форматов файлов изображений:
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)
(Есть аналогичные средний цвет программ здесь , но они не обязательно делать точно такой же расчет) .
Основное требование для вашей программы заключается в том, что для любого входного изображения средний соответствующий цвет его выходного сигнала должен точно соответствовать цвету, который был введен, - согласно фрагменту кода Python или некоторому эквивалентному коду. Выходное изображение также должно иметь те же размеры, что и входное изображение.
Таким образом, вы можете технически представить программу, которая просто окрашивает весь входной сигнал указанным средним цветом (потому что этот цвет всегда будет средним), но это конкурс популярности - победит представление с наибольшим количеством голосов , и такая тривиальная представление не принесет вам много голосов. Новые идеи, такие как использование преимуществ в человеческом зрении или уменьшение изображения и рисование цветной рамки вокруг него, (будем надеяться) принесут вам голоса.
Обратите внимание, что определенные комбинации средних цветов и изображений требуют чрезвычайно заметных изменений цвета. Например, если средний цвет для сопоставления был черным (0, 0, 0), любое входное изображение нужно было бы сделать полностью черным, потому что, если бы любые пиксели имели ненулевые значения, они также делали бы среднее ненулевое значение ( исключая ошибки округления). Учитывайте такие ограничения при голосовании.
Тестовые изображения
Некоторые изображения и их стандартные цвета по умолчанию для игры. Нажмите для полного размера.
А. среднее (127, 127, 127)
От fejesjoco «s Изображения со всеми цветами ответ . Нашел оригинал в своем блоге .
Б. средний (62, 71, 73)
Yokohama . Предоставлено Geobits .
C. средний (115, 112, 111)
Токио . Предоставлено Geobits .
D. средний (154, 151, 154)
Е. среднее (105, 103, 102)
Гора Шаста . Предоставлено мной.
F. среднее (75, 91, 110)
Примечания
- Точные форматы ввода и вывода и типы файлов изображений, используемые вашей программой, не имеют большого значения. Просто убедитесь, что понятно, как использовать вашу программу.
- Вероятно, это хорошая идея (но технически не является обязательным требованием), что если изображение уже имеет целевой средний цвет, оно должно выводиться как есть.
- Пожалуйста, опубликуйте тестовые изображения со средним входным цветом (150, 100, 100) или (75, 91, 110), чтобы избиратели могли видеть одни и те же входные данные в разных решениях. (Публиковать больше примеров, чем это хорошо, даже рекомендуется.)