OpenCV

OpenCV — свободная и мультиплатформенная библиотека для задач компьютерного зрения и анализа изображений, распространяемая по лицензии BSD и пригодная для научно-образовательного, исследовательского и коммерческого использования[1].

Библиотека была разработана компанией Intel в 2000 году для разработки приложений в области машинного зрения[1][2] и также применяется в искусственном интеллекте и машинном обучении[2].

OpenCV включает модули для обработки изображений и видео[2], работы с структурами данных, линейной алгеброй, базовой графической пользовательской оболочкой с независимыми окнами, поддержкой мыши и клавиатуры, а также содержит более 350 инструментов и алгоритмов компьютерного зрения, включая фильтры изображений, калибровку камер, распознавание объектов, структурный анализ. Обработка изображений в библиотеке происходит в режиме реального времени[2].

Библиотека реализована на языках C, C++, поддерживает встраивание в приложения на Java, Python и Visual Basic. Первая стабильная версия OpenCV 1.0 вышла в конце 2006 года, версия 2.0 — в сентябре 2009 года.

Общие сведения
OpenCV
Тип библиотека
Авторы Intel Corporation, Willow Garage, Itseez
Разработчик Open Source Vision Fundation
Написана на C, C++, Python
Операционная система мультиплатформенная
Языки интерфейса C, C++, Python, Java, MATLAB/Octave
Первый выпуск 1999
Аппаратная платформа мультиплатформенная
Последняя версия 4.9.0 (28 декабря 2023)
Репозиторий github.com/opencv/opencv
Лицензия BSD
Сайт opencv.org

История

Официально проект OpenCV был запущен в 1999 году как инициатива исследовательского центра Intel Research по разработке эффективных вычислительных приложений высокой производительности, в ряду проектов, связанных с трассировкой лучей и 3D-мониторами. Основной вклад в разработку внесли сотрудники Intel Россия и команда по оптимизации библиотек Intel. Изначально были сформулированы следующие цели:

  • Содействовать развитию научных исследований в области компьютерного зрения, предоставив не просто открытый, но и оптимизированный код для базовых задач, пригодный для изучения и повторного использования;
  • Содействовать коммерческим приложениям, основанным на компьютерном зрении, предоставив портируемый и оптимизированный код бесплатно, с лицензией, не обязывающей дальнейшее распространение в открытом виде.

Возможности

OpenCV применяется для анализа изображений и видео в реальном времени в задачах искусственного интеллекта (ИИ) и машинного обучения (ML), обеспечивая предварительную обработку изображений и видеопотоков перед подачей их на вход моделей машинного и глубокого обучения (DL)[2]. Предварительная обработка может включать изменение размеров, преобразование цветового пространства (BGR↔RGB), подавление шумов, улучшение качества (выделение признаков алгоритмами SIFT, SURF, FAST для поиска ключевых точек), обработку видеопотока в реальном времени (оптический поток), удаление фона, обнаружение объектов (например, каскады Хаара для распознавания лиц), геометрическое понимание и калибровку камеры, анализ и реконструкцию сцен (3D), применение классических алгоритмов ML (SVM, KNN)[2].

OpenCV интегрируется с библиотеками машинного обучения PyTorch и TensorFlow: тогда как последние используются для построения и обучения нейронных сетей, OpenCV обеспечивает ввод/вывод, преобразование и постобработку визуальных данных (например, отрисовка ограничивающих прямоугольников или масок сегментации на изображениях на основе работы моделей)[2].

Применение

OpenCV используется в различных задачах искусственного интеллекта и машинного обучения:

  • Автономные транспортные средства: в автомобилях и в системах помощи водителю (ADAS) OpenCV применяется для предварительной обработки данных с камеры и LiDAR: обнаружения дорожной разметки, распознавания препятствий (сопоставление признаков), выделения контуров, распознавания дорожных знаков (классификация обработанных изображений), сшивки изображений в системах кругового обзора[2]. Необработанные кадры камеры корректируются (исправляется искажение, настраивается яркость) для дальнейшей передачи в YOLOv8 — модель глубокого обучения, обнаруживающую автомобили и пешеходов[2];
  • Медицинская визуализация: OpenCV обрабатывает различные форматы медицинских изображений (например, DICOM), повышает контраст для поиска аномалий, сегментирует области интереса (опухоли, органы) с применением алгоритмов пороговой обработки или водораздела, выполняет регистрацию изображений, сделанных в разное время[2]. Обработанные данные далее анализируются специализированными моделями машинного обучения для диагностики (например, в радиологии — RSNA);
  • Другие области: робототехника (интеграция компьютерного зрения с роботами[2]), видеонаблюдение (security alarm systems[2]), дополненная и виртуальная реальность, управление сельским хозяйством (оценка состояния растений), интерфейсы взаимодействия человека и компьютера (HCI), системы распознавания лиц, распознавание движений, мобильные роботы, реконструкция 3D-сцен; программный пакет Opentoonz использует OpenCV для ряда задач машинного зрения.

Платформы и совместимость

Библиотека OpenCV поддерживает следующие платформы: Android[3], BlackBerry 10[4], FreeBSD, iOS[5], Linux, Maemo[6], OpenBSD, macOS и Windows.

Структура библиотеки

  • cv — основной модуль с базовыми функциями и алгоритмами компьютерного зрения;
  • cvaux — экспериментальные алгоритмы компьютерного зрения;
  • cxcore — работа со структурами данных и линейной алгеброй;
  • highgui — пользовательский интерфейс и поддержка устройств ввода;
  • ml — обработка изображений с помощью алгоритмов машинного обучения;
  • dnn — обработка изображений с использованием глубокого обучения;
  • ed — инструменты и методы работы со структурами данных.

Языки программирования

OpenCV написан на C++, его основной программный интерфейс (API) реализован на C++, однако по-прежнему поддерживается обширная, но менее универсальная, старая платформа, т. н. C-интерфейс. Все новые разработки и алгоритмы добавляются в C++-интерфейс. Кроме того, существуют привязки для Python (например, функции OpenCV cv.line[7], cv2.cvtcolor[8], cv2.circle[9]), Java, MATLAB/Octave. Документация по API для этих языков размещена в открытом доступе[10].

Для расширения аудитории в различных языках программирования разработаны дополнительные обёртки. C версии 3.4 в составе библиотеки появилась поддержка JavaScript в виде OpenCV.js — реализации части функциональности OpenCV для использования в веб-проектах[11].

Ограничения

Использование некоторых алгоритмов библиотеки предполагает высокий уровень математических и программных знаний[1]; производительность может варьироваться в зависимости от аппаратного обеспечения и сложности решаемых задач[1].

Примечания

  1. 1 2 3 4 O que é OpenCV: Entenda a Biblioteca de Visão Computacional (порт.). Chapeco (6 августа 2024). Дата обращения: 2 июля 2025. Архивировано 2 июля 2025 года.
  2. 1 2 3 4 5 6 7 8 9 10 11 12 OpenCV: Biblioteca de visão computacional de código aberto (порт.). Ultralytics. Дата обращения: 2 июля 2025. Архивировано 13 августа 2025 года.
  3. Android port: OpenCV Experimental. Дата обращения: 2 июля 2025. Архивировано 26 ноября 2012 года.
  4. BlackBerry 10 (partial port): OpenCV. Дата обращения: 2 июля 2025. Архивировано 28 августа 2024 года.
  5. iPhone port: OpenCV for iOS. Дата обращения: 2 июля 2025. Архивировано 10 июля 2025 года.
  6. Maemo port: OpenCV. Дата обращения: 2 июля 2025. Архивировано 28 апреля 2025 года.
  7. OpenCV cv.line (11 октября 2021). Дата обращения: 2 июля 2025. Архивировано 23 февраля 2024 года.
  8. OpenCV cv2.cvtcolor (11 октября 2021). Дата обращения: 2 июля 2025. Архивировано 18 июля 2025 года.
  9. OpenCV cv2.circle (11 октября 2021). Дата обращения: 2 июля 2025. Архивировано 4 августа 2024 года.
  10. OpenCV C interface. Дата обращения: 2 июля 2025.
  11. Introduction to OpenCV.js and Tutorials. Дата обращения: 2 июля 2025. Архивировано 26 августа 2025 года.