Напишіть програму, яка має стандартне зображення truecolor та єдиний 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)
C. середній (115, 112, 111)
D. середній (154, 151, 154)
E. середній (105, 103, 102)
Гора Шаста . Наданий мною.
Середній F. (75, 91, 110)
Примітки
- Точні формати введення та виводу та типи файлів зображень, які використовує ваша програма, не мають великого значення. Просто переконайтеся, що зрозуміло, як користуватися програмою.
- Напевно, це гарна ідея (але технічно не є вимогою), що якщо зображення вже має цільовий середній колір, воно повинно виводитися таким, яким воно є.
- Будь ласка, опублікуйте тестові зображення із середнім кольором (150, 100, 100) або (75, 91, 110), щоб виборці могли бачити однакові дані у різних рішеннях. (Опублікувати більше прикладів, ніж це добре, навіть рекомендується.)