OpenCV – компьютерное зрение

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

OpenCV – компьютерное зрение: инструменты и применение библиотеки в обработке изображений и видео

SEO Title: OpenCV – компьютерное зрение: обработка изображений, видео и распознавание объектов
Meta Description: Изучите OpenCV – компьютерное зрение: работа с изображениями, видео, фильтрация, контуры, распознавание лиц и объекты, примеры и установка.


Введение в OpenCV

OpenCV (Open Source Computer Vision Library) — это открытая библиотека компьютерного зрения и обработки изображений, разработанная для повышения производительности в задачах машинного зрения. Она активно используется в научных и коммерческих проектах, обеспечивая средства обработки изображений, видеоанализа и распознавания объектов в реальном времени.


История и развитие библиотеки

Библиотека была создана в 1999 году в Intel Research и с тех пор развивается как открытый проект. OpenCV поддерживает C++, Python, Java и другие языки программирования. На сегодняшний день она применяется в системах наблюдения, робототехнике, биометрии, дополненной реальности и автономном транспорте.


Основные возможности OpenCV

  • Загрузка, сохранение, отображение изображений и видео

  • Цветовые преобразования (BGR, RGB, HSV, LAB и др.)

  • Пространственные трансформации (масштабирование, поворот, аффинные преобразования)

  • Сегментация, выделение контуров, фильтрация

  • Обнаружение и распознавание лиц, объектов, фигур

  • Встроенные алгоритмы DNN (глубокие нейросети)

  • Совместимость с NumPy, SciPy, TensorFlow


Установка и подключение OpenCV

Установка для Python:

bash
pip install opencv-python

Для расширенной функциональности:

bash
pip install opencv-contrib-python

Подключение:

python
import cv2

Работа с изображениями: загрузка, отображение, сохранение

python
image = cv2.imread('image.jpg') cv2.imshow('Image', image) cv2.waitKey(0) cv2.destroyAllWindows() cv2.imwrite('output.jpg', image)

Функции imread, imshow, imwrite являются базовыми инструментами визуализации и сохранения.


Преобразования изображений: масштабирование, поворот, обрезка

  • Масштабирование:

python
resized = cv2.resize(image, (300, 300))
  • Поворот:

python
(h, w) = image.shape[:2] center = (w // 2, h // 2) matrix = cv2.getRotationMatrix2D(center, 45, 1.0) rotated = cv2.warpAffine(image, matrix, (w, h))
  • Обрезка:

python
cropped = image[50:200, 100:300]

Цветовые пространства и преобразования

Перевод в оттенки серого:

python
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

Конвертация в HSV:

python
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

OpenCV работает по умолчанию в формате BGR, что следует учитывать при использовании с другими библиотеками.


Фильтрация и обработка изображений

  • Гауссов фильтр:

python
blurred = cv2.GaussianBlur(image, (5, 5), 0)
  • Детекторы границ:

python
edges = cv2.Canny(gray, 50, 150)

Фильтрация улучшает качество изображения перед дальнейшей обработкой.


Выделение контуров и сегментация

python
contours, _ = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) cv2.drawContours(image, contours, -1, (0, 255, 0), 2)

Контуры позволяют выделять фигуры, объекты и зоны интереса.


Работа с видео и захват с камеры

Захват с веб-камеры:

python
cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() cv2.imshow('Frame', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()

Также поддерживается работа с видеофайлами и запись на диск.


Распознавание лиц и объектов

python
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5)

OpenCV предоставляет встроенные каскады Хаара и поддержку DNN-архитектур для распознавания.


Работа с текстом и шрифтами на изображениях

python
cv2.putText(image, 'OpenCV', (10, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)

Добавление текста используется для маркировки и визуализации меток.


Машинное обучение и DNN в OpenCV

OpenCV поддерживает загрузку и применение моделей:

  • Caffe

  • TensorFlow

  • ONNX

  • Darknet

Пример загрузки DNN-модели:

python
net = cv2.dnn.readNetFromONNX('model.onnx')

Используется для классификации, сегментации, детекции объектов.


Интеграция с другими библиотеками: NumPy, Matplotlib, TensorFlow

  • NumPy используется для работы с массивами изображений

  • Matplotlib — для визуализации изображений:

python
import matplotlib.pyplot as plt plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
  • TensorFlow и PyTorch могут использовать OpenCV для предобработки входных данных.


Примеры практического применения OpenCV

  • Системы видеонаблюдения и трекинг движения

  • Сегментация объектов и анализ изображений в медицине

  • Подсчёт объектов на производстве

  • Автоматическое распознавание номеров автомобилей (ANPR)

  • Реализация систем дополненной реальности

  • Предобработка данных для нейросетей


Часто задаваемые вопросы

Что такое OpenCV?

Это библиотека с открытым исходным кодом для компьютерного зрения, анализа изображений и видео.

Поддерживает ли OpenCV работу с видео?

Да, включая захват с камеры, обработку и сохранение видеопотока.

Как установить OpenCV?

С помощью pip: pip install opencv-python.

Поддерживает ли OpenCV нейросети?

Да, через модуль cv2.dnn.

Можно ли использовать OpenCV с другими библиотеками?

Да, она совместима с NumPy, Matplotlib, TensorFlow, PyTorch.

Полный справочник по ключевым функциям и модулям библиотеки OpenCV для Python

Установка

bash
pip install opencv-python pip install opencv-contrib-python # Для дополнительных модулей

Основы: изображение и видео

Функция Описание
cv2.imread(filename) Загружает изображение в виде массива NumPy.
cv2.imshow(window_name, image) Отображает изображение в окне.
cv2.imwrite(filename, image) Сохраняет изображение в файл.
cv2.waitKey(ms) Ожидает нажатие клавиши (в миллисекундах).
cv2.destroyAllWindows() Закрывает все окна.
cv2.VideoCapture(index_or_path) Захват видео с камеры или файла.
cv2.VideoWriter(filename, codec, fps, size) Сохраняет видео.

Работа с цветами

Функция Описание
cv2.cvtColor(image, code) Преобразование цветовых пространств (например, BGR2GRAY, BGR2RGB).
cv2.split(image) / cv2.merge(channels) Разделение и объединение каналов.
cv2.inRange(img, lower, upper) Маска по диапазону цветов.

Рисование на изображении

Функция Описание
cv2.line(img, pt1, pt2, color, thickness) Рисует линию.
cv2.rectangle(img, pt1, pt2, color, thickness) Рисует прямоугольник.
cv2.circle(img, center, radius, color, thickness) Рисует круг.
cv2.putText(img, text, pos, font, size, color, thickness) Добавляет текст.

Геометрические преобразования

Функция Описание
cv2.resize(img, dsize) Изменение размера изображения.
cv2.rotate(img, flag) Поворот изображения (ROTATE_90_CLOCKWISE и др.).
cv2.flip(img, flipCode) Отражение по вертикали/горизонтали.
cv2.warpAffine(img, M, dsize) Аффинное преобразование.
cv2.warpPerspective(img, M, dsize) Перспективное преобразование.
cv2.getRotationMatrix2D(center, angle, scale) Матрица поворота.

Фильтрация и размытие

Функция Описание
cv2.blur(img, ksize) Упрощённое размытие.
cv2.GaussianBlur(img, ksize, sigmaX) Гауссово размытие.
cv2.medianBlur(img, ksize) Медианное размытие.
cv2.bilateralFilter(img, d, sigmaColor, sigmaSpace) Двустороннее размытие (сохраняет границы).

Границы и контуры

Функция Описание
cv2.Canny(img, threshold1, threshold2) Детектор границ Канни.
cv2.findContours(img, mode, method) Находит контуры объектов.
cv2.drawContours(img, contours, index, color, thickness) Рисует найденные контуры.
cv2.approxPolyDP() Аппроксимация контура (например, упрощение многоугольника).
cv2.boundingRect() Прямоугольник, охватывающий контур.
cv2.minEnclosingCircle() Минимальная окружность вокруг контура.

Морфологические операции

Функция Описание
cv2.erode(img, kernel) Эрозия (сужение объектов).
cv2.dilate(img, kernel) Дилатация (расширение объектов).
cv2.morphologyEx(img, op, kernel) Комбинированные операции (OPEN, CLOSE, GRADIENT).
cv2.getStructuringElement(shape, ksize) Создание ядра морфологии.

Пороговая обработка и бинаризация

Функция Описание
cv2.threshold(img, thresh, maxval, type) Простой порог (бинаризация).
cv2.adaptiveThreshold(img, maxval, method, type, blockSize, C) Адаптивная бинаризация.

Работа с лицами и объектами

Функция / Класс Описание
cv2.CascadeClassifier(path) Загрузка каскадного классификатора (например, для лиц).
detectMultiScale(img) Детектирование объектов.
cv2.dnn.readNetFromONNX() / FromCaffe() / FromTensorflow() Загрузка нейросетей.

Оптический поток и трекинг

Функция Описание
cv2.calcOpticalFlowPyrLK() Отслеживание точек на видео (движение).
cv2.goodFeaturesToTrack() Поиск сильных углов.
cv2.TrackerKCF_create() и др. Трекинг объектов в видео.

Пример: базовая обработка изображения

python
import cv2 img = cv2.imread("image.jpg") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) edges = cv2.Canny(gray, 100, 200) cv2.imshow("Edges", edges) cv2.waitKey(0) cv2.destroyAllWindows()

Пример: детектирование лиц

python
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') img = cv2.imread('face.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5) for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.imshow("Faces", img) cv2.waitKey(0) cv2.destroyAllWindows()

Заключение: роль OpenCV в современных проектах по компьютерному зрению

OpenCV — это один из наиболее зрелых и функциональных инструментов для компьютерного зрения. Его широкие возможности, активная поддержка сообщества и богатый функционал позволяют применять библиотеку в самых разных сферах: от распознавания лиц и объектов до систем навигации и промышленного контроля. Это универсальный инструмент как для исследований, так и для внедрения в производственные решения.