Python OpenCV: Обработка изображений и видео (Урок 2)

Изображение состоит из пикселей. Простой пример: чёрное число на белом фоне. Белые точки описываются числом 1, чёрные – 0. Чёрно-белые фотографии используют тот же бинарный формат (единицы и нули), просто с большим количеством точек.

Представление изображений в числовом формате

Изображения с большим количеством оттенков серого используют 256 уровней (от 0 – полностью чёрный, до 255 – полностью белый). Каждый пиксель представляется числом от 0 до 255.

Цветные изображения состоят из трёх серых изображений: красного, зелёного и синего каналов (RGB). Каждый пиксель описывается тремя значениями от 0 до 255 для каждого канала. Этот формат называется RGB и широко используется в программировании.

Видео – это последовательность быстро сменяющихся изображений, описываемая числовым способом с помощью описания каждого отдельного изображения, как описано выше.

Работа с изображениями и видео в OpenCV

Этот урок научит открывать и обрабатывать изображения и видео с помощью OpenCV.

Подгрузка и отображение изображений

  1. Импорт библиотеки: import cv2
  2. Чтение изображения: img = cv2.imread("путь/к/изображению.jpg")
  3. Отображение изображения: cv2.imshow("Результат", img)

    Для указания времени отображения используется cv2.waitKey(milliseconds). cv2.waitKey(0) отображает изображение до закрытия окна вручную.

Подгрузка и отображение видео

  1. Создание объекта захвата видео: cap = cv2.VideoCapture("путь/к/видео.mp4")
  2. Цикл обработки кадров: Цикл while перебирает кадры видео.
  3. Чтение кадра: success, img = cap.read() (success – булево значение, указывающее на успешность чтения).
  4. Отображение кадра: cv2.imshow("Результат", img)
  5. Управление скоростью воспроизведения: cv2.waitKey(1) устанавливает минимальное время отображения кадра.
  6. Выход из цикла: Проверка нажатия клавиши ‘q’: if cv2.waitKey(1) & 0xFF == ord(‘q’): break

Работа с веб-камерой

Для работы с веб-камерой, вместо пути к файлу, в cv2.VideoCapture() передаётся 0 (или номер веб-камеры, если их несколько). Размеры изображения можно установить с помощью cap.set(cv2.CAP_PROP_FRAME_WIDTH, 500) и cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 300).

Основные функции обработки изображений

Получение размеров изображения

shape = img.shape возвращает кортеж (высота, ширина, количество каналов).

Изменение размера изображения

resized_img = cv2.resize(img, (новая_ширина, новая_высота))

Пропорциональное уменьшение:

width = img.shape[1] // 2
height = img.shape[0] // 2
resized_img = cv2.resize(img, (width, height))

Обрезка изображения

Используются срезы для доступа к части изображения (например, img[0:100, 0:150]).

Размытие изображения

blurred_img = cv2.GaussianBlur(img, (размер_ядра, размер_ядра), 0) (размер ядра должен быть нечётным).

Преобразование в оттенки серого

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Обнаружение краёв (Canny)

edges = cv2.Canny(img, threshold1, threshold2) (threshold1 и threshold2 – пороги).

Утолщение контуров

Используется cv2.dilate() с ядром, созданным с помощью numpy.ones().

Утончение контуров

Используется cv2.erode().

В этом уроке мы рассмотрели основы работы с изображениями и видео в OpenCV на Python, включая загрузку, отображение, изменение размера, размытие, преобразование в оттенки серого, а также обнаружение и обработку контуров. Эти знания послужат основой для дальнейшего изучения более сложных аспектов обработки изображений и видео, таких как распознавание объектов и создание нейронных сетей.

Что будем искать? Например,программа