Практическое руководство по изображениям в Python

Раздел: Мультимедиа -> Компьютерное зрение

Основные библиотеки для работы с изображениями в Python

Наиболее эффективное решение: OpenCV (cv2)

Как загрузить изображение и преобразовать его в оттенки серого с помощью OpenCV?


import cv2
img = cv2.imread('photo.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imwrite('gray_photo.jpg', gray)

Python opencv functions (функции opencv в python)

Файл gray_photo.jpg сохранён в оттенках серого.

Python opencv 215 assertion failed (ошибка assertion в opencv python)

OpenCV использует формат BGR для цветовых каналов. При преобразовании в RGB для отображения через matplotlib применяют cv2.cvtColor(img, cv2.COLOR_BGR2RGB). Для работы с видео и веб-камерой также подходит эта библиотека.

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

Вариант с Pillow (PIL)


from PIL import Image
img = Image.open('photo.jpg')
img_rotated = img.rotate(45)
img_rotated.save('rotated_photo.jpg')

Python изображения (работа с изображениями в python)

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

Как применить научные методы обработки изображений, такие как фильтрация и обнаружение границ?

Вариант с scikit-image


from skimage import io, filters, feature
img = io.imread('photo.jpg')
edges = feature.canny(img, sigma=1.0)
io.imsave('edges.jpg', edges)

библиотека cv2 python (библиотека opencv в python)

Библиотека тесно связана с numpy и scipy, предоставляет множество алгоритмов для компьютерного зрения, сегментации и морфологии.

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

Вариант с matplotlib


import matplotlib.pyplot as plt
import matplotlib.image as mpimg
img = mpimg.imread('photo.jpg')
plt.subplot(1,2,1)
plt.imshow(img)
plt.subplot(1,2,2)
plt.hist(img.ravel(), bins=256)
plt.show()

Matplotlib не предназначен для обработки, но незаменим для визуализации результатов и отладки.

Типичные проблемы и их решения

  • ImportError: No module named 'cv2' - не установлен opencv-python. Решение: pip install opencv-python.
  • Изображение не загружается (None) - неверный путь или повреждён файл. Проверить существование файла, использовать абсолютный путь.
  • Цвета отображаются некорректно - путаница BGR/RGB. Использовать cv2.cvtColor(img, cv2.COLOR_BGR2RGB) перед отображением.
  • Ошибка при сохранении: "ffmpeg not found" - для некоторых форматов (например, GIF) требуются дополнительные кодеки.

Расширенные примеры обработки изображений

Обнаружение лиц с помощью каскадов Хаара

Пример

import cv2
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
img = cv2.imread('group_photo.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)
for (x,y,w,h) in faces:
    cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)
cv2.imwrite('faces_detected.jpg', img)
Изображение с обведёнными лицами сохранено.

Морфологические операции для очистки бинарного изображения

Пример

import cv2
import numpy as np
img = cv2.imread('noisy_binary.png', 0)
kernel = np.ones((5,5), np.uint8)
erosion = cv2.erode(img, kernel, iterations=1)
dilation = cv2.dilate(erosion, kernel, iterations=1)
cv2.imwrite('cleaned.png', dilation)
Шум удалён, объекты стали более ровными.

Пакетная обработка: создание миниатюр для галереи

Пример

import os
from PIL import Image
input_folder = 'photos/'
output_folder = 'thumbnails/'
os.makedirs(output_folder, exist_ok=True)
for filename in os.listdir(input_folder):
    if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
        img = Image.open(os.path.join(input_folder, filename))
        img.thumbnail((150,150))
        img.save(os.path.join(output_folder, filename))
Все изображения уменьшены до 150x150 пикселей с сохранением пропорций.

Фильтр Гаусса для сглаживания изображения

Пример

import cv2
img = cv2.imread('noisy.jpg')
blurred = cv2.GaussianBlur(img, (5,5), 1.5)
cv2.imwrite('blurred.jpg', blurred)
Изображение стало менее шумным, детали сглажены.

Работа с изображениями в Python - comments

En
Python изображения (python)