Pillow обработка изображений в Python на примерах |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2020-01-17 17:38 Библиотека изображений Python, или PIL (Python Imaging Library) нужна для обработки графики в Python. Фредрик Лунд является автором одного из лучших блогов, посвященных Python. Однако он перестал обновляться в далеком 2009 году, незадолго до последнего релиза PIL. К счастью, нашлись разработчики Python, что подхватили проект, создав форк PIL под названием Pillow. Pillow стал заменой оригинальной библиотеки PIL. Он также поддерживает Python 3, чего PIL так и не достиг. Обратите внимание на то, что PIL и Pillow не могут быть установлены одновременно. В документации есть определенные предупреждения, где перечисляются различия между PIL и Pillow. Они обновляются время от времени, поэтому лучше ознакомиться с последними изменениями на официальной странице. Изображения которые используются в уроке: Установка Pillow в Python Установить Pillow в Python можно через pip или Shell pip3 install pillow
Обратите внимание, что при работа на Linux или Mac может потребоваться запускать команду через Мы собрали ТОП Книг для Python программиста которые помогут быстро изучить язык программирования Python. Список книг: Книги по Python Открытие изображения в Python с Pillow Через Pillow можно легко открыть изображение и отобразить его на экране через внешнюю программу. Взглянем на пример: Python from PIL import Image image = Image.open('jelly.jpg') image.show()
Метод Получение информации об изображении через Pillow С помощью Pillow также можно получить подробную информацию об изображении. Рассмотрим небольшой пример: Python >>> from PIL import Image >>> image = Image.open('jelly.jpg') >>> r, g, b = image.split() >>> histogram = image.histogram() [384761, 489777, 557209, 405004, 220701, 154786, 55807, 35806, 21901, 16242] >>> exif = image._getexif() exif {256: 1935, 257: 3411, 271: u'Panasonic', 272: u'DMC-LX7', 274: 1, 282: (180, 1), 283: (180, 1), 296: 2, 305: u'PaintShop Pro 14.00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00', 306: u'2016:08:21 07:54:57', 36867: u'2016:08:21 07:54:57', 36868: u'2016:08:21 07:54:57', 37121: 'x01x02x03x00', 37122: (4, 1), 37381: (124, 128), 37383: 5, 37384: 0, 37385: 16, 37386: (47, 10), 40960: '0100', 40961: 1, 40962: 3968, 40963: 2232, 41495: 2, 41728: 'x03', 41729: 'x01', 41985: 0, 41986: 0, 41987: 0, 41988: (0, 10), 41989: 24, 41990: 0, 41991: 0, 41992: 0, 41993: 0, 41994: 0}
В данном примере показано, как извлечь значение RGB (red, green, blue) изображения. Также показано, как получить гистограмму изображения. Обратите внимание, что здесь вывод немного урезан, изначально он был намного больше. Вы можете построить график гистограммы, используя другой пакет Python — matplotlib. Приведенный выше пример демонстрирует, как извлечь информацию EXIF из изображения. Опять же, здесь вывод этого метода несколько сокращен, поскольку он содержит слишком много информации, которая не имеет особого значения для статьи. Обрезка изображений через Pillow (crop) Pillow также можно использовать для обрезки изображения. Это довольно легкий процесс, хотя он постигается методом проб и ошибок. Попробуем обрезать нашу картинку с медузой через Python from PIL import Image image = Image.open('jelly.jpg') cropped = image.crop((0, 80, 200, 400)) cropped.save('/path/to/photos/cropped_jelly.png')
Обратите внимание, здесь просто нужно открыть изображение, после чего вызвать метод В Pillow пиксель 0 является верхним левым уровнем. С увеличением значения Довольно унылый результат. Я ведь хотел получить «голову» медузы. Для быстрого получения правильных координат можно использовать Gimp или Photoshop. Он поможет определить координаты для следующего обрезания. Python from PIL import Image image = Image.open('jelly.jpg') cropped = image.crop((177, 882, 1179, 1707)) cropped.save('/path/to/photos/cropped_jelly2.png')
При запуске кода результатом станет следующее обрезанное изображение: Намного лучше! Программа обрезает картинку, после чего новая версия сохраняется на диск. Метод Поворачивание изображения — метод rotate() Pillow
Python from PIL import Image import sys try: tatras = Image.open("tatras.jpg") except IOError: print("Unable to load image") sys.exit(1) rotated = tatras.rotate(180) rotated.save('tatras_rotated.jpg')
Данная программа поворачивает изображения на 180 градусов и сохраняет файл результат в виде новой картинки на диск. Отображение картинки в Tkinter Python Следующий код нужен для отображения картинки в программе Tkinter. Python #!/usr/bin/python3 # -*- coding: utf-8 -*- from PIL import Image, ImageTk from tkinter import Tk from tkinter.ttk import Frame, Label import sys class Example(Frame): def __init__(self): super().__init__() self.loadImage() self.initUI() def loadImage(self): try: self.img = Image.open("tatrs.jpg") except IOError: print("Unable to load image") sys.exit(1) def initUI(self): self.master.title("Label") tatras = ImageTk.PhotoImage(self.img) label = Label(self, image=tatras) # reference must be stored label.image = tatras label.pack() self.pack() def setGeometry(self): w, h = self.img.size self.master.geometry(("%dx%d+300+300") % (w, h)) def main(): root = Tk() ex = Example() ex.setGeometry() root.mainloop() if __name__ == '__main__': main()
Программа показывает картинку в виджет Python from PIL import Image, ImageTk
Python tatras = ImageTk.PhotoImage(self.img)
Здесь мы создаем изображение. Python label = Label(self, image=tatras)
Изображению передаются параметру Python label.image = tatras
Во избежание скапливания мусора отсылки на изображения должны сохраняться. Python w, h = self.img.size self.master.geometry(("%dx%d+300+300") % (w, h))
Размер окна совпадает с размером изображения. Загрузка изображения из URL в Pillow В следующем примере показано, как получить изображение, указав его URL адрес. Python from PIL import Image import requests import sys url = 'https://i.ytimg.com/vi/vEYsdh6uiS4/maxresdefault.jpg' try: resp = requests.get(url, stream=True).raw except requests.exceptions.RequestException as e: sys.exit(1) try: img = Image.open(resp) except IOError: print("Unable to open image") sys.exit(1) img.save('sid.jpg', 'jpeg')
Код читает изображение через его URL и сохраняет его на диск. Python import requests
Мы используем библиотеку requests для загрузки изображения. Python resp = requests.get(url, stream=True).raw
Изображение читается как данные Python img = Image.open(resp)
Картинка создается из ответного объекта Python img.save('sid.jpg', 'jpeg')
И в конечном итоге изображение сохраняется. Создание рисунка в Pillow У Pillow есть базовые возможности для создания 2D графики. Модуль Python from PIL import Image, ImageDraw # Создаем белый квадрат img = Image.new('RGBA', (200, 200), 'white') idraw = ImageDraw.Draw(img) idraw.rectangle((10, 10, 100, 100), fill='blue') img.save('rectangle.png')
В примере создается новое изображение, на котором нарисован голубой прямоугольник поверх белого фона. Python img = Image.new('RGBA', (200, 200), 'white')
Создается новое изображение, у которого режим «RGBA», размер 200х200 и белый фон. Python idraw = ImageDraw.Draw(img)
Из картинки создается объект Python idraw.rectangle((10, 10, 100, 100), fill='blue')
С помощью метода ImageFont — Пишем текст на изображение используя Pillow В следующем коде показано, как в Python можно написать текст на изображении с помощью Pillow. На сайте есть отдельная статья по нанесению водяного знака на изображение: Python from PIL import Image, ImageDraw, ImageFont import sys try: tatras = Image.open("tatras.jpg") except: print("Unable to load image") sys.exit(1) idraw = ImageDraw.Draw(tatras) text = "High Tatras" font = ImageFont.truetype("arial.ttf", size=18) idraw.text((10, 10), text, font=font) tatras.save('tatras_watermarked.png')
Для создания рисунка используется модуль Python font = ImageFont.truetype("arial.ttf", size=18)
Создается шрифт Arial с размером 18. Python idraw.text((10, 10), text, font=font)
Сам текст наносится через метод Использование фильтров в Pillow Оригинальное изображение с медузой Pillow позволяет использовать множество различных фильтров для обработки изображения. Они являются частью модуля ImageFilter. Давайте рассмотрим несколько примеров использования метода Python from PIL import ImageFilter from PIL import Image image = Image.open('jelly.jpg') blurred_jelly = image.filter(ImageFilter.BLUR) blurred_jelly.save('/path/to/photos/blurry_jelly.png')
Программа берет определенное изображение, создает на его основе размытую картинку, используя Размытая картинка с медузой Однако в подобающем большинстве случаев размывать изображение нет нужды, наоборот — требуется увеличить резкость. Pillow меняет резкость картинки следующим образом: Python from PIL import ImageFilter from PIL import Image image = Image.open('/path/to/photos/jelly.jpg') blurred_jelly = image.filter(ImageFilter.SHARPEN) blurred_jelly.save('/path/to/photos/sharper_jelly.png')
Результат после запуска кода выше: Картинка с медузой после применения фильтра резкости Кроме того, для увеличения резкости фотографий в Python можно использовать модуль ImageEnhance. Можно использовать и другие фильтры — Для сравнения эффектов от использования фильтров можете скачать изображения, которые были представлены в примерах выше. Конвертирование из JPG в PNG пример Pillow В Python Pillow метод Python from PIL import Image import sys try: tatras = Image.open("tatras.jpg") except IOError: print("Unable to load image") sys.exit(1) tatras.save('tatras.png', 'png')
Программа считывает изображение JPG и конвертирует его в PNG формат. Это делает в следующей строчке: Python tatras.save('tatras.png', 'png')
Второй параметр метода Создаем черно-белое изображение GrayScale в Pillow С помощью метода Python from PIL import Image import sys try: tatras = Image.open("tatras.jpg") except IOError: print("Unable to load image") sys.exit(1) grayscale = tatras.convert('L') grayscale.show()
Программа читает изображение и трансформирует его в черно-белое. За это отвечает следующая строка: Python grayscale = tatras.convert('L')
Первый параметр метода Изменение размера изображения в Pillow resize() Можно изменить длину и ширину изображения при помощи метода
Изменение размера изображения имея ширину и высоту Python from PIL import Image # Меняем размер изображения на новый. tatras = Image.open("tatras.jpg") tatras = tatras.resize((100, 100), Image.ANTIALIAS)
Изменение ширины с учетом пропорций для новой высоты изображения Python from PIL import Image tatras = Image.open("tatras.jpg") new_width = 680 # ширина new_height = int(new_width * height / width) tatras = tatras.resize((new_width, new_height), Image.ANTIALIAS) tatras.show()
Изменение высоты изображения, пропорционально обновляем и ширину Python from PIL import Image tatras = Image.open("tatras.jpg") new_height = 680 # Высота new_width = int(new_height * width / height) tatras = tatras.resize((new_width, new_height), Image.ANTIALIAS) tatras.show()
Заключение С пакетом Pillow вы можете сделать гораздо больше, чем описано в этой короткой статье. Pillow поддерживает преобразования и улучшение изображений, возможность печати фото и многое другое. Я настоятельно рекомендую прочитать документацию Pillow, чтобы получить полное представление обо всем, что вы можете сделать. Источник: python-scripts.com Комментарии: |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||