Библиотека NumPy: Использование для обработки изображений

NumPy (“Numerical Python”) — это библиотека Python, которая активно используется для обработки изображений благодаря своим возможностям работы с массивами. Изображения могут быть представлены как массивы чисел, где каждый элемент массива соответствует интенсивности пикселя.

Как NumPy используется для обработки изображений?

  1. Чтение и преобразование изображений: NumPy позволяет преобразовывать изображения в массивы чисел для их дальнейшей обработки.
  2. Применение фильтров: Вы можете выполнять свертку, сглаживание или обнаружение краев.
  3. Изменение размера и поворот: Простые операции над массивами, такие как масштабирование или транспонирование, позволяют изменять размеры или поворачивать изображения.
  4. Работа с цветом: Манипуляции с цветными изображениями через раздельные каналы (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.