Какие библиотеки Python используются для обработки изображений?

«Какие библиотеки Python используются для обработки изображений?» — вопрос из категории Библиотеки и модули, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Основные библиотеки:

  • Pillow (PIL Fork): Является форком Python Imaging Library (PIL) и предоставляет мощные возможности для базовой обработки изображений.
    • Применение: Изменение размера, обрезка, поворот, наложение фильтров, работа с цветовыми пространствами, преобразование форматов. Идеально подходит для веб-приложений, обработки пользовательских аватаров, генерации превью.
  • OpenCV (Open Source Computer Vision Library): Мощная библиотека для компьютерного зрения, изначально написанная на C++, но имеющая полноценные Python-биндинги.
    • Применение: Обнаружение объектов, распознавание лиц, сегментация, отслеживание движения, калибровка камеры, сложные алгоритмы обработки изображений и видео в реальном времени.

Пример обработки изображения с Pillow (обрезка и поворот):

from PIL import Image

try:
    # Открытие изображения
    img = Image.open('example.jpg') # Убедитесь, что файл 'example.jpg' существует

    # Обрезка изображения: (left, top, right, bottom)
    # Обрезаем центральную часть размером 300x300 пикселей
    width, height = img.size
    left = (width - 300) / 2
    top = (height - 300) / 2
    right = (width + 300) / 2
    bottom = (height + 300) / 2
    cropped_img = img.crop((left, top, right, bottom))

    # Поворот изображения на 45 градусов
    rotated_img = cropped_img.rotate(45, expand=True) # expand=True сохраняет все изображение после поворота

    # Сохранение обработанного изображения
    rotated_img.save('processed_example.jpg')
    print("Изображение успешно обработано и сохранено как 'processed_example.jpg'")

except FileNotFoundError:
    print("Ошибка: Файл 'example.jpg' не найден. Пожалуйста, убедитесь, что он находится в той же директории.")
except Exception as e:
    print(f"Произошла ошибка при обработке изображения: {e}")

Помимо этих, существуют специализированные библиотеки, такие как scikit-image для научных вычислений с изображениями и imgaug для аугментации данных в задачах машинного обучения.