Практическое руководство по изображениям в 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)
Изображение стало менее шумным, детали сглажены.