Работа с картинки
- Краен срок:
- 14.03.2016 17:00
- Точки:
- 10
Срокът за предаване на решения е отминал
За целта на задачата двумерен масив от пиксели ще наричаме изображение. Всеки
пиксел ще бъде кортеж с три елемента (Red, Green,
Blue)
, които ще определят цвета му. Вашата
задача е да напишете следните функции за обработка на снимки:
rotate_left
Приема като аргумент изображение и връща същото изображение завъртяно 90 градуса наляво
rotate_right
Аналогично на rotate_left
, но завърта изображението надясно
invert
Приема като аргумент изображение и връща неговият негатив, т.е. изображение, в
което всеки пиксел е обърнат (взима се допълнението му до бялото, например
(100, 155, 15)
се преобразува до (155, 100, 240)
.
lighten
Приема два аргумента - изображение и реално число между 0
и 1
. Връща
изображението изсветлено с коефициент реалното число. Изсветляването се случва
пиксел по пиксел като всеки от тях се изсвелява по начинът показан по-долу.
Ако реалното число е 0.5
и пикселът, който искаме да преобразуваме е (90,
60, 90)
:
(90, 60, 90) -> (90 + 0.5*(255 - 90), 60 + 0.5*(255 - 60), 90 + 0.5*(255 - 90))
darken
Приема два аргумента - изображение и реално число между 0
и 1
. Връща
изображението потъмнено с коефициент реалното число. Затъмняването се случва
пиксел по пиксел като всеки от тях се потъмнява по начинът показан по-долу.
Ако реалното число е 0.5
и пикселът, който искаме да преобразуваме е (90,
60, 90)
:
(90, 60, 90) -> (90 - 0.5*(90 - 0), 60 - 0.5*(60 - 0), 90 - 0.5*(90 - 0))
create_histogram
Функцията приема като аргумент изображението и връща хистограма по всеки от трите цвята. Хистограмата ни трябва да представлява речник с три ключа:
'red'
'green'
'blue'
Всеки ключ се асоциира с речник с ключове от 0 до 255. Стойността на ключа i
в речника асоцииран с 'red'
показва колко пъти стойността i
се среща като
стойност на червеното измежду пикселите в изображението.
Хистограмата на нашата панда изглежда така:
Визуализация
За да ви в по-лесно да прецените коректността на вашите домашни, сме ви подготвили малък скрипт, който да генерира изображения.
- Инсталирайте
Pillow
:pip install Pillow
- Инсталирайте
matplotlib
:pip install matplotlib
или http://matplotlib.org/users/installing.html - Кръстете файла с вашето решение
solution.py
- В същата директория поставете
render.py
- Изпълнете командата
python render.py panda.jpg darken 0.7
. Това ще изпълни вашата имплементация наdarken()
, върху изображениетоpanda.jpg
(в същата директория) и ще подаде0.5
като аргумент. - Аналогично:
python render.py panda.jpg rotate_left
python render.py panda.jpg rotate_right
python render.py panda.jpg lighten 0.5
python render.py panda.jpg create_histogram
Забележки:
- Функциите не трябва да променят подадените им стойности!
- Не трябва да валидирате подадените данни. Ние няма да тестваме с невалидни данни.
- Имате право да дефинирате и други функции, освен описаните по-горе задължителни такива.