NumPy (“Numerical Python”) — это библиотека Python, которая активно используется для обработки изображений благодаря своим возможностям работы с массивами. Изображения могут быть представлены как массивы чисел, где каждый элемент массива соответствует интенсивности пикселя.
Как NumPy используется для обработки изображений?
- Чтение и преобразование изображений: NumPy позволяет преобразовывать изображения в массивы чисел для их дальнейшей обработки.
- Применение фильтров: Вы можете выполнять свертку, сглаживание или обнаружение краев.
- Изменение размера и поворот: Простые операции над массивами, такие как масштабирование или транспонирование, позволяют изменять размеры или поворачивать изображения.
- Работа с цветом: Манипуляции с цветными изображениями через раздельные каналы (RGB).
Примеры использования NumPy для обработки изображений
Пример 1: Загрузка и преобразование изображения
В этом примере мы используем библиотеку NumPy совместно с Pillow (PIL) для работы с изображениями:
from PIL import Image
import numpy as np
# Загрузка изображения
image = Image.open("example.jpg")
# Преобразование в массив NumPy
image_array = np.array(image)
print("Размер изображения:", image_array.shape)
# Отображение массива
print(image_array)
Пример 2: Преобразование в оттенки серого
# Преобразование цветного изображения в оттенки серого
gray_image = np.mean(image_array, axis=2).astype(np.uint8)
# Преобразование обратно в изображение
gray_image_pil = Image.fromarray(gray_image)
gray_image_pil.show()
Пример 3: Применение фильтра размытия (свертка)
def apply_blur_filter(image_array):
kernel = np.ones((3, 3)) / 9 # Ядро размытия 3x3
padded_image = np.pad(image_array, ((1, 1), (1, 1), (0, 0)), mode='constant')
blurred_image = np.zeros_like(image_array)
for i in range(image_array.shape[0]):
for j in range(image_array.shape[1]):
for k in range(3): # Для каждого цветового канала
blurred_image[i, j, k] = np.sum(
padded_image[i:i+3, j:j+3, k] * kernel
)
return blurred_image
blurred_image = apply_blur_filter(image_array)
blurred_image_pil = Image.fromarray(blurred_image)
blurred_image_pil.show()
Пример 4: Масштабирование изображения
def resize_image(image_array, scale):
height, width, channels = image_array.shape
new_height, new_width = int(height * scale), int(width * scale)
resized_image = np.zeros((new_height, new_width, channels), dtype=image_array.dtype)
for i in range(new_height):
for j in range(new_width):
resized_image[i, j] = image_array[int(i / scale), int(j / scale)]
return resized_image
resized_image = resize_image(image_array, 0.5)
resized_image_pil = Image.fromarray(resized_image)
resized_image_pil.show()
Пример 5: Работа с отдельными каналами цвета
# Извлечение канала красного цвета
red_channel = image_array[:, :, 0]
# Установка значений зеленого и синего каналов в 0
red_image = image_array.copy()
red_image[:, :, 1] = 0 # Зеленый канал
red_image[:, :, 2] = 0 # Синий канал
red_image_pil = Image.fromarray(red_image)
red_image_pil.show()
NumPy предоставляет мощные инструменты для работы с изображениями, позволяя выполнять базовые и сложные преобразования с помощью простых операций над массивами. Если вы хотите углубиться в обработку изображений, NumPy отлично сочетается с другими библиотеками, такими как OpenCV, Pillow и SciPy. Попробуйте описанные примеры на своих изображениях, чтобы лучше понять возможности NumPy.