Подписывайтесь:

Блог AST-SoftPro

Обработка изображений в Python: OpenCV, Pillow и AI

03.06.2026 10 мин чтения

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

Обработка изображений — важная область компьютерных технологий, используемая в анализе данных, распознавании объектов, медицинской визуализации и системах безопасности. В Python существует множество библиотек для работы с графикой: OpenCV, Pillow и интеграция с моделями искусственного интеллекта (AI). Каждая из них решает свои задачи — от простых преобразований до сложных задач компьютерного зрения.

В этой статье рассматриваются три основных подхода:

  • Базовые операции с изображениями через Pillow;

  • Расширенные возможности OpenCV для анализа изображений;

  • Интеграция обработанных данных с моделями машинного обучения и AI (включая TensorFlow, PyTorch).

Статья не претендует на исчерпывающий охват всех возможностей библиотек, но даёт практические примеры кода и пояснения по каждому этапу.

Pillow: простая работа с изображениями в Python

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

Установка и базовая загрузка

Для начала нужно установить библиотеку:

pip install pillow

Пример загрузки изображения из файла:

from PIL import Image
image = Image.open('example.jpg')
print(f'Размер: {image.size}, Формат: {image.format}')
## Отображение (только в Jupyter или GUI)
image.show()

Примечание: show() работает не во всех средах выполнения. Для проверки можно использовать .save('output.jpg').

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

  • Изменение размера:
resized = image.resize((800, 600))
  • Поворот на 90 градусов по часовой стрелке:
rotated = image.rotate(90)
  • Конвертация в монохром (чёрно-белое):
grayscale = image.convert('L')
  • Сохранение результата:
resized.save('output_resized.jpg', format='JPEG')

Ограничения Pillow

Pillow не предоставляет инструментов для анализа изображений (например, обнаружение краёв или распознавание лиц). Она эффективна только на этапе предобработки: конвертация форматов, сжатие, базовые преобразования.

OpenCV: компьютерное зрение в Python

OpenCV — мощная библиотека для обработки и анализа изображений. Поддерживает работу с видео, детекцию объектов, фильтрацию, машинное обучение и другие продвинутые функции. Чаще используется в задачах компьютерного зрения (computer vision).

Установка OpenCV

pip install opencv-python-headless  # версия без GUI

headless-версия подходит для серверных сред — она не требует графической подсистемы.

Загрузка и просмотр изображения

Пример загрузки JPEG-файла:

import cv2
image = cv1imread('example.jpg')
if image is None:
    print('Ошибка: изображение не загружено')
else:
    # Отображение (только в средах с GUI, например JupyterLab)
    cv2.imshow('Image', image)
    cv2.waitKey(0)  # Ждём нажатия клавиши

Важно: cv2.imshow() работает только при наличии графической среды. В серверных приложениях рекомендуется использовать .imwrite() для сохранения.

Основные операции OpenCV

  • Преобразование в оттенки серого:
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  • Инверсия цвета (чёрный становится белым):
inverted = ~gray  # Битовая инверсия
  • Обнаружение краёв с помощью Canny:
edges = cv2.Canny(image, threshold1=50, threshold2=150)
  • Поворот на угол α (в градусах):
rows, cols = image.shape[:2]
center = (cols // 2, rows // 2)
dst = cv2.getRotationMatrix2D(center, angle=45, scale=1.0)
rotated = cv2.warpAffine(image, dst, (cols, rows))
  • Сохранение изображения:
cv2.imwrite('output_opencv.jpg', rotated)

Работа с видео

OpenCV позволяет обрабатывать видеопотоки в реальном времени:

cap = cv2.VideoCapture(0)  # Камера по умолчанию (webcam)
while True:
    ret, frame = cap.read()
    if not ret:
        break
    gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imshow('Webcam', frame)
    cv2.imshow('Gray', gray_frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

Такой код можно адаптировать под анализ видеозаписей: cv2.VideoCapture('video.mp4').

Интеграция с моделями машинного обучения и AI

Для решения сложных задач (распознавание лиц, классификация изображений) изображения проходят предварительную обработку в OpenCV или Pillow, а затем подаются на вход нейронной сети. Наиболее популярные фреймворки — TensorFlow и PyTorch.

Подготовка данных: нормализация и масштабирование

Модель ожидает тензор фиксированного размера (например, 224×224×3). Изображение нужно:

  • Изменить размер;

  • Привести к типу float32;

  • Нормализовать значения пикселей в диапазон [0, 1] или [-1, 1].

Пример обработки через OpenCV перед передачей в модель:

import cv2
from tensorflow.keras.applications import MobileNetV2
# Загрузка и предобработка
image = cv2.imread('test.jpg')
img_resized = cv2.resize(image, (224, 224))
img_normalized = img_resized.astype(np.float32) / 255.0

Примечание: Некоторые модели требуют вычитания среднего значения или применение других нормализаций — см. документацию конкретной архитектуры.

Пример: классификация с помощью MobileNetV2

from tensorflow.keras.applications import MobileNetV2, preprocess_input
import numpy as np
def predict_image(model_path='mobilenet_v2_1.0_224_metadata.json', image_path='test.jpg'):
    model = tf.keras.models.load_model(model_path)
    img = cv2.imread(image_path)
    resized = cv2.resize(img, (224, 224))
    input_img = np.expand_dims(resized, axis=0)  # Добавляем batch dimension
    processed = preprocess_input(input_img)        # Подготовка под MobileNetV2
    prediction = model.predict(processed)
    label = 'Категория' if prediction[0][1] > prediction[0][0] else 'Не категория'
    return label, np.max(prediction[0])

Для работы preprocess_input должен соответствовать ожидаемому формату модели.

Расширения: YOLO и детекция объектов

Библиотека YOLO (You Only Look Once) позволяет находить объекты на изображении. Её можно использовать через OpenCV с предобработкой:

from yolov5 import detect as yolo_detect
# Запуск модели YOLOv5
results = yolo_detect.run(source='test.jpg', weights='yolov5s.pt')
for det in results[0]:  # Первая картинка в выводе
    print(f'Объект: {det["name"]}, Координаты: {det["xyxy"]}')

YOLO требует отдельной установки (pip install yolov5), а веса — скачать с официального репозитория.

Совместное использование Pillow и AI-моделей

Pillow может использоваться для предварительной обработки (например, обрезка по ROI), после чего данные передаются в модель:

from PIL import Image
cv2_image = cv2.imread('original.jpg')
pil_img = Image.fromarray(cv2_image)
crop_box = (100, 50, 300, 200)  # Левый верх: x,y; правый низ: w,h
cropped_pil = pil_img.crop(crop_box)
## Преобразование обратно в OpenCV формат для модели
cv_cropped = np.array(cropped_pil)

Такой подход полезен, когда нужно вручную выделить область интереса (например, лицо на фото) и затем проанализировать её.

Сравнение библиотек: выбор инструмента

Библиотека Простая обработка Анализ изображений Поддержка видео Интеграция с AI
Pillow ✅ Отличная ❌ Нет ⚠️ Ограниченно
OpenCV ✅ Хорошая ✅ Отлично ✅ Да ✅ Хорошо

Рекомендация: Используйте Pillow для задач форматирования и конвертации. OpenCV — для анализа, фильтрации и компьютерного зрения. Для AI-расширений всегда применяйте предварительную обработку через одну из этих библиотек.

Заключение

В обработке изображений Python предоставляет мощные инструменты:

  • Pillow — простой способ изменить размер, формат или цвет изображения;

  • OpenCV — полноценный фреймворк для анализа и компьютерного зрения;

  • Интеграция с AI-моделями (TensorFlow, PyTorch, YOLO) возможна после предварительной обработки.

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

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

AI-Помощник