timeit

Програмиране с Python

Курс във Факултета по Математика и Информатика към СУ

Работа с картинки

Предадени решения

Краен срок:
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 се среща като стойност на червеното измежду пикселите в изображението.

Хистограмата на нашата панда изглежда така:

Хистограма на панда

Визуализация

За да ви в по-лесно да прецените коректността на вашите домашни, сме ви подготвили малък скрипт, който да генерира изображения.

  1. Инсталирайте Pillow: pip install Pillow
  2. Инсталирайте matplotlib: pip install matplotlib или http://matplotlib.org/users/installing.html
  3. Кръстете файла с вашето решение solution.py
  4. В същата директория поставете render.py
  5. Изпълнете командата python render.py panda.jpg darken 0.7. Това ще изпълни вашата имплементация на darken(), върху изображението panda.jpg (в същата директория) и ще подаде 0.5 като аргумент.
  6. Аналогично:
    • 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

Забележки:

  • Функциите не трябва да променят подадените им стойности!
  • Не трябва да валидирате подадените данни. Ние няма да тестваме с невалидни данни.
  • Имате право да дефинирате и други функции, освен описаните по-горе задължителни такива.