Pillow python создание изображения

Создание и чтение изображения в Pillow Python

Чтобы создать новое изображение с помощью библиотеки Python Pillow PIL, используйте метод Image.new().

Синтаксис

Синтаксис метода Image.new():

  • mode – это режим изображения, например, RGB, RGBA, CMYK и т.д;
  • size – это кортеж с шириной и высотой изображения в качестве элементов, значения ширины и высоты указаны в пикселях;
  • color предназначен для закрашивания всех пикселей, в зависимости от режима значения могут быть предоставлены для каждой полосы в целом в виде кортежа. Параметр цвета является необязательным, значение цвета по умолчанию – 0.

Пример 1

В этом примере мы создадим новое изображение в режиме RGB с размером (400, 300). Мы не будем указывать цвет, поэтому методы new() считают значение цвета по умолчанию 0 – для каналов RGB будет черным цветом.

from PIL import Image width = 400 height = 300 img = Image.new( mode = "RGB", size = (width, height) ) img.show()

Создание нового изображения

Метод show() отобразит изображение на вашем ПК с помощью приложения для просмотра изображений по умолчанию.

Пример 2: с определенным цветом фона

В этом примере мы создадим новое изображение с режимом RGB, размером (400, 300) и цветом (209, 123, 193), соответствующим красному, зеленому и синему каналам соответственно.

from PIL import Image width = 400 height = 300 img = Image.new( mode = "RGB", size = (width, height), color = (209, 123, 193) ) img.show()

Создание изображения с определенным цветом

Пример 3: с определенным цветовым режимом

В наших предыдущих примерах мы использовали режим RGB для создания изображения. Давайте попробуем с другим режимом, например CMYK.

from PIL import Image width = 400 height = 300 img = Image.new( mode = "CMYK", size = (width, height), color = (209, 123, 193, 100) ) img.show()

Создание изображения с определенным режимом

В этом руководстве на примерах Python мы узнали, как создать новое изображение с помощью метода Image.new() библиотеки Pillow с помощью примеров программ.

Как прочитать изображение?

В этом руководстве мы узнаем, как читать или открывать изображение с помощью библиотеки Pillow, а также различные ситуации, с которыми можно столкнуться, с помощью примеров программ.

  1. Импортировать изображение из библиотеки PIL.
  2. Используйте метод Image.open() и передайте путь к файлу изображения в качестве аргумента. Функция возвращает объект Image. Вы можете сохранить этот объект изображения и применить к нему операции с изображением.

Пример 1: с использованием PIL

В следующем примере мы будем читать изображение с помощью функции Image.open() пакета PIL.

from PIL import Image im = Image.open("sample-image.png")

Image.open() возвращает объект типа класса PIL.PngImagePlugin.PngImageFile.

В этом примере файл изображения помещается в то же место, что и файл примера python. Если вы хотите прочитать изображение, находящееся в другом месте, вы должны указать полный путь.

В следующем примере программы мы предоставим полный путь к входному изображению.

from PIL import Image im = Image.open("D:/images/sample-image.png")

Пример 2

В этом примере мы моделируем скрипт, в котором мы указываем неверный путь к Image.open(). Другими словами, файл не существует по указанному нами пути.

from PIL import Image im = Image.open("D:/images/no-image.png")

Поскольку файл изображения отсутствует в этом месте, Image.open() выдает FileNotFoundError.

Traceback (most recent call last): File "d:/workspace/example.py", line 3, in im = Image.open("D:/images/sample-image.png") File "C:\Users\pythonexamplesorg\AppData\Local\Programs\Python\Python37\lib\site-packages\PIL\Image.py", line 2652, in open fp = builtins.open(filename, "rb") FileNotFoundError: [Errno 2] No such file or directory: 'D:/images/sample-image.png'

Пример 3: без расширения

В этом примере мы попытаемся прочитать изображение без расширения. Мы не указываем расширение изображения, если это JPG, PNG и т.д.

from PIL import Image im = Image.open("D:/sample")

Image.open() определяет кодек изображения, используя данные и метаданные, присутствующие в содержимом изображения.

Источник

Введение в обработку изображений в Python при помощи Pillow

Бывает такой заходишь на почту и видишь очередную подборку статей, которые никогда не прочитаешь, но тут так сошлись звезды, что и открыл статью, и прочел, и придумал, где на практике пригодится. А теперь хочу поделиться статьей с Хабром, чтобы если кому-то нужен будет простой и понятный гайд по работе с изображениями на Python — пожалуйста.

Pillow — это свободно распространяемая библиотека для работы с изображениями (далее Imaging Library) на Python с открытым исходным кодом, которая добавляет вашему коду поддержку открытия, изменения и сохранения изображений в различных расширениях.

Давайте начнем

Самый важный класс в Imaging Library Python — это класс Image, определенный в одноименном модуле. Мы используем open(), чтобы открыть изображение в нашей локальной директории, как показано ниже:

from PIL import Image sample = Image.open('pena.jpg')

Это просто! Теперь вы умеете считывать изображения с помощью Pillow, а значит можно приступать к обработке изображения с его помощью. Вы также можете проверить тип изображения, которое мы только что загрузили.

type(sample) PIL.JpegImagePlugin.JpegImageFile

Вы можете посмотреть свойства изображения, например:

sample.format 'JPEG' sample.size (640, 640) sample.mode 'RGB'

Кроме того, вы можете вывести на экран изображение, используя метод show

sample.show() #Открывает в новом окне, расширение изображения меняется на PNG

Конвертирование расширения изображения

Когда вы закончите работать с изображением при помощи библиотеки Pillow в изначальном расширении, вы можете пересохранить его в других форматах, например, их jpg сделать png или многие другие.

Для примера, давайте попробуем написать простую программу на Python для преобразования всех изображений в каталоге вашего проекта, которые находятся в формате jpg, в формат png.

import os import sys from PIL import Image jpg_images = [image for image in os.listdir() if image.endswith('.jpg')] for jpg_image in jpg_images: try: new_name = jpg_image.split('.')[0] + '.png' Image.open(jpg_image).save(new_name) except IOError as error: print('Couldn\'t read <> '.format(jpg_image))

После того, как вы запустите приведенный выше код, в каталоге проекта, состоящем из изображений в формате jpg, откроются все изображения и преобразуются в .png, как показано на скриншоте. Вы можете повторить тот же процесс для преобразования изображений в другие преобразований.

Обрезка изображения

Pillow также может использоваться для обрезки изображения, при этом вы можете получить производный прямоугольник выбранного изображения, указав координаты, по которым преобразовать изображение.

from PIL import Image picture = Image.open('pena.png') cord = (10, 10, 640, 340) # лево, верх, право, низ new_picture = picture.crop(cord) new_picture.show()

Как мы видим, изображение было успешно обрезано. Координаты обрезанной поверхности представлены диагональными координатами.

При этом первые две точки находятся (x, y) от верхней левой диагональной точки, а следующие две точки (x2, y2) также являются диагональной точкой снизу справа.

Геометрическое преобразование

С помощью Pillow мы можем выполнять некоторые геометрические преобразования над изображением, включая изменение размера и поворот изображения.

Эти знания играют большую роль при генерации данных для глубокого обучения путем преобразования одного изображения в тонны других изображений с разных ракурсов.

Изменение размера изображения

from PIL import Image image = Image.open('pena.png') resized_image = image.resize((320, 320)) resized_image.save('resized.png')

Когда вы запустите приведенный выше код, вы должны увидеть новое изображение с измененным размером в вашем каталоге с размером 320 на 320.

Поворот изображения

from PIL import Image image = Image.open('pena.png') rotated_img = image.rotate(80) rotated_img.save('./rotation/rotated_img.png')

Используйте функцию вращения для создания 360 изображений одного из того же изображения под разными углами — это поможет сгенерировать данные, которые вы потенциально можете использовать для обучения своей модели глубокого обучения.

Генератор изображений

from PIL import Image images = ['pena.jpg'] for img in images: try: org_img = Image.open(img) for angle in range(1, 361): image_name = str(angle)+'.jpg' new_img = org_img.rotate(angle) new_img.save('./rotation/'+image_name) except IOError: print('Couldn\'t read <>'.format(img))

После запуска скрипта, вы должны увидеть 360 изображений одного и того же исходного изображения с разным поворотом, как показано ниже.

Фильтрация изображений

Фильтрация — это метод изменения или улучшения изображения. Например, вы можете отфильтровать изображение, чтобы выделить определенные особенности или удалить другие.

Фильтрация изображений используется для получения различных результатов, как, например,- сглаживание, повышение резкости, удаление шума и обнаружение краев.

В библиотеке Pillow доступно множество фильтров, включая BLUR, BoxBlur, CONTOUR, FIND_EDGES, Filter, GaussianBlur, Kernel, MaxFilter, MedianFilter, SHARPEN, SMOOTH и т.д.

Пример использования

Давайте попробуем найти края на изображении ниже, используя фильтр FIND_EDGES.

from PIL import Image from PIL import Image, ImageFilter image = Image.open('pena.jpg') edges = image.filter(ImageFilter.FIND_EDGES) edges.show()

Таким же образом вы можете экспериментировать с другими фильтрами в Python библиотеке Pillow в зависимости от того, что вы пытаетесь сделать.

Чтение изображения из открытого файла

Кроме того, вы можете использовать Pillow для чтения изображения из файлового объекта Python, как показано ниже

from PIL import Image image = Image.open(open('pena.jpg', 'rb'))

Чтение изображения из URL

В этом случае вам придется использовать Pillow в сочетании с запросами. Запросы должны будут отправлять GET-request на сервер, чтобы получить необработанные байты изображения, а уже Pillow считает эти байты.

import requests from PIL import Image url = 'http://pena.marketing/images/Logo1.png' raw = requests.get(url, stream=True).raw Image.open(raw).show()

Создание новых изображений

С помощью Pillow вы также можете создать новое пустое изображение, которое может понадобиться для различных целей. Используйте Image.new() для создания совершенно нового изображения.

new = Image.new(mode, shape, color)

Пример использования:

from PIL import Image new_img = Image.new('RGB', (500, 500), 'blue') new_img.show()

Рисование прямоугольников на изображениях

Pillow также может использоваться для рисования прямоугольника на изображениях. Обычно это делают при обнаружении объекта. При этом вы можете нарисовать не просто прямоугольник, а рамку над обнаруженным объектом.

Пример исползования

Давайте попробуем нарисовать прямоугольную рамку внутри пустого изображения.

from PIL import Image, ImageDraw new_img = Image.new('RGB', (400, 400), 'black') pencil = ImageDraw.Draw(new_img) pencil.rectangle((200, 50, 300, 300), fill ='green') new_img.show()

Первые две координаты представляют (x, y) левой верхней части, а следующие две (x2, y2) представляют координатную точку правой нижней части.

Рисование текста на изображениях

Мы также можем использовать библиотеку Pillow для рисования текста на изображениях.

from PIL import Image , ImageDraw, ImageFont new_img = Image.new('RGB', (200, 200), 'black') font = ImageFont.load_default() pencil = ImageDraw.Draw(new_img) pencil.text((100,100),'Hello World', font=font, fill='blue', size = 36) new_img.show()

Источник

Читайте также:  Javascript function return object value
Оцените статью