Изображение состоит из пикселей. Простой пример: чёрное число на белом фоне. Белые точки описываются числом 1, чёрные – 0. Чёрно-белые фотографии используют тот же бинарный формат (единицы и нули), просто с большим количеством точек.
Представление изображений в числовом формате
Изображения с большим количеством оттенков серого используют 256 уровней (от 0 – полностью чёрный, до 255 – полностью белый). Каждый пиксель представляется числом от 0 до 255.
Цветные изображения состоят из трёх серых изображений: красного, зелёного и синего каналов (RGB). Каждый пиксель описывается тремя значениями от 0 до 255 для каждого канала. Этот формат называется RGB и широко используется в программировании.
Видео – это последовательность быстро сменяющихся изображений, описываемая числовым способом с помощью описания каждого отдельного изображения, как описано выше.
Работа с изображениями и видео в OpenCV
Этот урок научит открывать и обрабатывать изображения и видео с помощью OpenCV.
Подгрузка и отображение изображений
- Импорт библиотеки: import cv2
- Чтение изображения: img = cv2.imread("путь/к/изображению.jpg")
- Отображение изображения: cv2.imshow("Результат", img)
Для указания времени отображения используется cv2.waitKey(milliseconds). cv2.waitKey(0) отображает изображение до закрытия окна вручную.
Подгрузка и отображение видео
- Создание объекта захвата видео: cap = cv2.VideoCapture("путь/к/видео.mp4")
- Цикл обработки кадров: Цикл while перебирает кадры видео.
- Чтение кадра: success, img = cap.read() (success – булево значение, указывающее на успешность чтения).
- Отображение кадра: cv2.imshow("Результат", img)
- Управление скоростью воспроизведения: cv2.waitKey(1) устанавливает минимальное время отображения кадра.
- Выход из цикла: Проверка нажатия клавиши ‘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, включая загрузку, отображение, изменение размера, размытие, преобразование в оттенки серого, а также обнаружение и обработку контуров. Эти знания послужат основой для дальнейшего изучения более сложных аспектов обработки изображений и видео, таких как распознавание объектов и создание нейронных сетей.