Настала зима, і настала пора року, коли вона почне холодно (а для дивних барвистих головних уборів почати з’являтися… незабаром). Давайте напишемо якийсь код, щоб зробити зображення аватара та інші зображення замороженими, щоб відповідати темі!
Вхідні дані
Вхідними даними для цього виклику повинні бути зображення (зображення, яке потрібно зробити замороженим) та число (поріг, який буде пояснено пізніше).
Ви можете вводити зображення будь-яким способом, який підтримує їх мова (шлях до файлу або URL-адреса як аргумент, беручи його з буфера обміну, перетягуючи та відпускаючи зображення тощо), і в будь-якому перерахованому тут форматі, що виражає кольори в RGB (ви Ви можете підтримувати / вимагати натомість RGBA, якщо хочете, але це не є вимогою).
Ви можете ввести номер будь-яким способом, який ви також хотіли (аргумент командного рядка, STDIN, діалогове вікно введення тощо), за винятком жорсткого кодування його у вашій програмі (наприклад n=10
). Якщо ви використовуєте шлях / URL-адресу для зображення, його також слід вводити таким чином.
Вихід
Програма повинна обробити зображення відповідно до наведеного нижче опису, а потім вивести його будь-яким способом (до файлу, показуючи його на екрані, поміщаючи в буфер обміну тощо).
Опис
Подання повинні обробити зображення з наступними трьома кроками. n
позначає число, яке ваша програма отримала як вхід разом із зображенням.
Застосувати розмиття радіусу
n
до вхідного зображення, замінивши R кожного пікселя, G, і значення B із середнім R, G, і значенням B всіх пікселів в межах Manhattan відстані відn
точок, ігноруючи всі координати через межі майданчика . (Тобто всі пікселі, де сума різниці в X та різниця у Y менша або дорівнюєn
.)(зауважте: я використовував розмиття Гаусса для зображень, наведених вище, тому що для нього була зручна вбудована функція, тому ваші зображення можуть виглядати дещо інакше.)
Встановіть кожен піксель на випадковий піксель у межах відстані
n/2
пікселів ("відстань" визначається так само, як і на попередньому кроці).Це слід зробити, переглянувши зображення та встановивши кожен піксель на випадковий піксель у цьому діапазоні, так що деякі пікселі можуть повністю зникнути, а деякі - дублюватись.
Усі зміни повинні застосовуватися одночасно. Іншими словами, використовуйте старі значення пікселів (після кроку 1, але перед цим кроком), а не нові значення після встановлення їх на випадковий піксель.
Помножте «блакитне» значення RGB кожного пікселя на 1,5, обмеживши його на 255 (або будь-яке максимальне значення для смуги пікселів) і округлюючи вниз.
Правила
Ви можете використовувати бібліотеки зображень / функції, пов’язані з обробкою зображень, вбудованими у вашу мову; однак ви не можете використовувати жодні функції, які виконують одне з трьох основних завдань, згаданих в описі. Наприклад, ви не можете використовувати
blur
функцію, алеgetPixel
функція прекрасна.Це код-гольф , тому найкоротший код у байтах виграє!
dx <= n && dy <= n
це точне зображення відстані на Манхеттені, чи не так?