Пропустить до содержимого

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

[

Обработка изображений с использованием библиотеки Python Pillow

Автор: Stephen Gruppetta intermediate

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

Pillow и его предшественник PIL - оригинальные библиотеки Python для работы с изображениями. Несмотря на то, что существуют и другие библиотеки Python для обработки изображений, Pillow остается важным инструментом для понимания и работы с изображениями.

Для изменения и обработки изображений Pillow предоставляет инструменты, которые похожи на те, что можно найти в графическом программном обеспечении, таком как Photoshop. Некоторые из более современных библиотек Python для обработки изображений построены на основе Pillow и часто предоставляют более продвинутые функции.

В этом руководстве вы узнаете, как:

  • Читать изображения с помощью Pillow
  • Выполнять базовые операции с изображениями
  • Использовать Pillow для обработки изображений
  • Использовать NumPy с Pillow для дальнейшей обработки
  • Создавать анимации с использованием Pillow

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

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

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

Базовые операции с изображениями с использованием библиотеки Python Pillow

Библиотека Python Pillow является форком старой библиотеки с именем PIL. PIL расшифровывается как Python Imaging Library, и это одна из первых библиотек Python для работы с изображениями.

Для начала работы с Pillow, у вас должна быть установлена библиотека. Если вы еще не установили ее, выполните следующую команду в командной строке:

pip install pillow

Импортируйте библиотеку в свой проект:

from PIL import Image

Теперь вы готовы начать использовать Pillow для основных операций с изображениями. Вот некоторые из них:

Модуль Image и класс Image в Pillow

# Открыть изображение
image = Image.open('image.jpg')
# Получить информацию о размере изображения
width, height = image.size
# Показать изображение
image.show()
# Сохранить изображение в новом формате
image.save('new_image.png', 'PNG')
# Закрыть изображение
image.close()

Основные операции с изображениями

# Изменить размер изображения
resized_image = image.resize((new_width, new_height))
# Повернуть изображение
rotated_image = image.rotate(90)
# Отразить изображение по горизонтали
flipped_image = image.transpose(Image.FLIP_LEFT_RIGHT)
# Применить фильтр размытия к изображению
blurred_image = image.filter(ImageFilter.BLUR)

Каналы и режимы изображения в библиотеке Python Pillow

# Получить все каналы изображения
bands = image.getbands()
# Получить режим изображения
mode = image.mode
# Преобразовать изображение в оттенки серого
grayscale_image = image.convert('L')

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

Обработка изображений с использованием Pillow в Python

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

Применение фильтров изображений с помощью матричных сверток

from PIL import ImageFilter
# Применить свертку к изображению для увеличения резкости
sharpened_image = image.filter(ImageFilter.SHARPEN)
# Применить свертку к изображению для размытия
blurred_image = image.filter(ImageFilter.BLUR)

Размытие, увеличение резкости и сглаживание изображений

# Размыть изображение
blurred_image = image.filter(ImageFilter.BLUR)
# Увеличить резкость изображения
sharpened_image = image.filter(ImageFilter.SHARPEN)
# Сгладить изображение
smooth_image = image.filter(ImageFilter.SMOOTH)

Обнаружение границ, улучшение границ и тиснение

# Обнаружить границы на изображении
edge_detected_image = image.filter(ImageFilter.FIND_EDGES)
# Улучшить границы на изображении
edge_enhanced_image = image.filter(ImageFilter.EDGE_ENHANCE)
# Применить тиснение к изображению
embossed_image = image.filter(ImageFilter.EMBOSS)

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

# Применить пороговое значение к изображению
thresholded_image = image.convert('L').point(lambda x: 0 if x < threshold_value else 255, '1')
# Произвести эрозию и дилатацию для очистки изображения
eroded_image = thresholded_image.filter(ImageFilter.MaxFilter(size=5))
dilated_image = eroded_image.filter(ImageFilter.MinFilter(size=5))
# Применить пороговое значение для сегментации изображения
segmented_image = dilated_image.convert('L').point(lambda x: 0 if x < threshold_value else 255, '1')
# Накладывание изображений с использованием метода Image.paste()
background_image.paste(overlay_image, (x, y), mask=overlay_image)
# Создание водяного знака
watermark = Image.new('RGBA', image.size, (0, 0, 0, 0))
draw = ImageDraw.Draw(watermark)
draw.text((x, y), 'WATERMARK', fill=(255, 255, 255, 128))
watermarked_image = Image.alpha_composite(image.convert('RGBA'), watermark)

Обработка изображений с использованием библиотеки NumPy и Pillow

import numpy as np
# Вычислить разность между двумя изображениями с помощью NumPy
image1 = np.array(image1)
image2 = np.array(image2)
diff_image = Image.fromarray(np.abs(image1 - image2).astype(np.uint8))
# Создать изображение с помощью NumPy
image_array = np.zeros((width, height, 3), dtype=np.uint8)
image = Image.fromarray(image_array)
# Создание анимаций
frames = []
for i in range(10):
frames.append(Image.open(f'frame_{i}.png'))
frames[0].save('animation.gif', save_all=True, append_images=frames[1:], optimize=False, duration=200, loop=0)

Вывод

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

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

Если вам интересно узнать больше о библиотеке Pillow и ее возможностях, обратитесь к документации Pillow, чтобы изучить все методы и функции библиотеки.

Теперь вы готовы начать работать с изображениями в Python с помощью библиотеки Pillow! Удачи в вашем путешествии в области обработки изображений!