Введение в обработку изображений на Python
Python предлагает множество библиотек для работы с изображениями: Pillow, OpenCV, scikit-image, imageio и другие. Каждая из них решает определённый круг задач. Рассмотрим эффективные подходы с конкретными примерами кода.
Как открыть, изменить размер и сохранить изображение с помощью Pillow?
Библиотека Pillow (форк PIL) - стандартный инструмент для базовых операций: загрузки, изменения геометрии, фильтрации и сохранения в популярных форматах.
from PIL import Image
img = Image.open('input.jpg')
print('Исходный размер:', img.size)
resized = img.resize((400, 300))
resized.save('output.jpg')
print('Готово')
Python работа с изображениями библиотеки (работа с изображениями в python с помощью библиотек)
Image.open открывает файл, resize возвращает новое изображение с заданными размерами, save сохраняет результат. Обратите внимание, что метод resize не изменяет оригинал.
Типичные ошибки и их решения:
- FileNotFoundError: проверьте путь и права доступа.
- OSError при сохранении RGBA в JPEG: предварительно конвертируйте в RGB.
if img.mode == 'RGBA':
img = img.convert('RGB')
Python pillow image (библиотека pillow для изображений)
Цель: подготовка изображений для веба, создание миниатюр, конвертация форматов.
Как выполнить поворот и отражение изображения с использованием OpenCV?
OpenCV (cv2) предоставляет функции геометрических преобразований и компьютерного зрения.
import cv2
img = cv2.imread('input.jpg')
# Поворот на 90 градусов по часовой
rotated = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
# Горизонтальное отражение
flipped = cv2.flip(img, 1)
cv2.imwrite('rotated.jpg', rotated)
cv2.imwrite('flipped.jpg', flipped)
Python размер изображения (получение размеров изображения в python)
OpenCV использует порядок каналов BGR, в отличие от Pillow. Для корректного отображения через matplotlib применяется cv2.cvtColor(img, cv2.COLOR_BGR2RGB).
Проблемы:
- Поворот возможен только на углы, кратные 90°, с помощью cv2.rotate. Для произвольного угла требуется аффинное преобразование.
- При отражении путаница с осью: 0 - вертикальное, 1 - горизонтальное, -1 - одновременно.
- Путь к файлу не должен содержать кириллицы в некоторых версиях OpenCV - используйте латиницу.
Случаи использования: предобработка датасетов, исправление ориентации, создание зеркальных копий.
Как применить фильтр размытия и выявить границы средствами scikit-image?
Scikit-image (skimage) основана на numpy и включает алгоритмы научной обработки.
from skimage import io, filters, feature
img = io.imread('input.jpg')
blurred = filters.gaussian(img, sigma=3)
edges = feature.canny(img, sigma=1)
io.imsave('blurred.jpg', blurred)
io.imsave('edges.jpg', edges)
Параметр sigma отвечает за степень размытия. Детектор Кэнни находит границы объектов.
Возможные ошибки:
- Изображение должно быть uint8 или float в диапазоне [0,1]. При передаче int64 может возникнуть предупреждение. Приведите тип: img = img.astype(float) / 255.
- Детектор Кэнни чувствителен к шуму - предварительно применяйте размытие.
- Сохранение результатов в JPEG может дать артефакты - используйте PNG для чёрно-белых карт.
Применение: анализ микроскопии, медицинская визуализация, выделение контуров.