1. Настройка среды разработки и первые шаги с OpenCV
Настройка среды разработки и первые шаги с OpenCV
Представьте: вы смотрите на фотографию и мгновенно видите на ней кофе, ноутбук и розетку. Компьютер видит лишь массив чисел — 1920×1080 пикселей, каждый из которых закодирован тремя числами от 0 до 255. Задача компьютерного зрения — научить машину извлекать из этого хаоса осмысленную информацию. И первый шаг к этому — правильно настроенная среда и понимание того, как OpenCV работает с изображениями на базовом уровне.
Установка Python и создание виртуального окружения
Прежде чем устанавливать библиотеки, создадим изолированное окружение. Это защитит проект от конфликтов версий — ситуация, когда один пакет требует numpy 1.24, а другой — numpy 1.26, встречается постоянно.
После активации в терминале появится префикс (cv_env) — значит, все пакеты будут установлены именно в это окружение.
Установка OpenCV
OpenCV существует в двух пакетах: opencv-python (основные модули) и opencv-contrib-python (дополнительные алгоритмы — SIFT, SURF, ArUco). Для нашего курса достаточно базовой версии.
> Если при импорте появляется ошибка ImportError: libGL.so.1, установите системную библиотеку: apt-get install libgl1-mesa-glx (Linux) или используйте headless-версию: pip install opencv-python-headless.
Проверим установку:
Чтение и отображение изображений
OpenCV загружает изображения как объекты numpy.ndarray — трёхмерный массив, где первые два измерения — высота и ширина, третье — цветовые каналы. Важный нюанс: OpenCV использует порядок каналов BGR (Blue-Green-Red), а не привычный RGB.
Функция cv2.imread() принимает второй аргумент — флаг загрузки:
| Флаг | Значение | Результат |
|------|----------|-----------|
| cv2.IMREAD_COLOR | 1 | Цветное изображение (BGR, 3 канала) |
| cv2.IMREAD_GRAYSCALE | 0 | Оттенки серого (1 канал) |
| cv2.IMREAD_UNCHANGED | -1 | Как есть (включая альфа-канал) |
Базовые операции с пикселями
Каждый пиксель — это элемент массива numpy. Можно обращаться к нему напрямую:
Представьте, что изображение — это лист клетчатой бумаги. Координата img[y, x] — это строка y и столбец x. Область img[50:200, 100:300] — прямоугольник от строки 50 до 200 и от столбца 100 до 300.
Конвертация цветовых пространств
Для компьютерного зрения оттенки серого — не просто «чёрно-белая картинка». Это уменьшение размерности данных в 3 раза при сохранении структурной информации (контуры, текстуры, градиенты яркости).
Пространство HSV особенно полезно для сегментации по цвету: компонента H (оттенок) отделена от яркости, поэтому объекты одного цвета хорошо определяются даже при разном освещении.
Сохранение изображений
Работа с matplotlib для визуализации
cv2.imshow() открывает отдельное окно, что неудобно в Jupyter Notebook. Matplotlib позволяет отображать изображения прямо в ячейке:
Если забыть конвертировать BGR в RGB, цвета будут инвертированы — красное небо и синяя трава. Это одна из самых частых ошибок начинающих.
Практический пример: пакетная обработка
Допустим, нужно привести все фотографии в папке к размеру 640×480 и сохранить в оттенках серого:
Этот простой скрипт — прототип пайплайна предобработки данных, который в реальных проектах компьютерного зрения обрабатывает тысячи изображений перед обучением нейросети.
На этом этапе у вас есть рабочая среда и понимание того, как OpenCV представляет изображения. В следующей статье мы перейдём к работе с видеопотоком и более сложным операциям обработки — фильтрации, выделению контуров и морфологическим преобразованиям.