C++ OpenCV

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

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

Изначально OpenCV разрабатывался компанией Intel, позже поддерживался Willow Garage и Itseez, а сейчас поддерживается OpenCV.org.

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

Основные функции OpenCV

К основным возможностям OpenCV относятся:

  • Обработка изображений: например, фильтрация изображений, геометрические преобразования, преобразование цветового пространства, обнаружение границ и т. д.

  • Обработка видео: например, захват видео, вычитание фона, вычисление оптического потока и т. д.

  • Обнаружение и описание признаков: алгоритмы, такие как SIFT, SURF, ORB и т. д.

  • Обнаружение и отслеживание объектов: например, каскадное обнаружение Хаара, обнаружение HOG, модели глубокого обучения и т. д.

  • Калибровка камеры и 3D-реконструкция: например, калибровка камеры, стереозрение, обработка облаков точек и т. д.

  • Машинное обучение: например, традиционные алгоритмы машинного обучения, такие как KNN, SVM, деревья решений и т. д.

  • Глубокое обучение: поддерживает загрузку и запуск моделей из таких фреймворков, как TensorFlow, PyTorch, Caffe и т. д.

Структура модулей OpenCV

Функции OpenCV организованы в несколько модулей, каждый из которых сосредоточен на разных задачах. Ниже приведено краткое описание основных модулей:

Название модуляОписание функций
CoreПредоставляет базовые структуры данных и функции, такие как хранение изображений, операции с матрицами, файловый ввод-вывод и т. д.
ImgprocФункции обработки изображений, включая фильтрацию, геометрические преобразования, преобразование цветового пространства, обнаружение краёв, морфологические операции и т. д.
HighguiОтображение изображений и видео, управление окнами, взаимодействие с пользователем (например, события мыши, ползунки).
ВидеоФункции обработки видео, включая захват видео, вычитание фона, вычисление оптического потока и т. д.
Calib3dКалибровка камеры, 3D-реконструкция, оценка позы и т. д.
Features2dОбнаружение и описание признаков, включая обнаружение ключевых точек, сопоставление признаков и т. д.
ObjdetectФункции обнаружения объектов, такие как обнаружение с помощью каскадов Хаара, обнаружение HOG и т. д.
DNNЗагрузка и инференс моделей глубокого обучения, поддержка таких фреймворков, как TensorFlow, PyTorch, Caffe, и т. д.
MLАлгоритмы машинного обучения, такие как KNN, SVM, деревья решений и т. д.
FlannБыстрый приближенный поиск ближайших соседей (FLANN), используемый для сопоставления признаков и поиска в многомерных данных.
PhotoВосстановление изображений, шумоподавление, HDR-визуализация и т. д.
StitchingФункциональность сшивки изображений, используемая для создания панорамных изображений.
ФигураАнализ и сопоставление форм.
ОтслеживаниеАлгоритмы отслеживания объектов, такие как MIL, KCF, GOTURN и т. д.

Основные модули OpenCV

Библиотека OpenCV состоит из множества модулей, каждый из которых ориентирован на разные функции. Ниже приведены некоторые из основных модулей OpenCV:

1. Модуль Core

Модуль Core — это основной модуль OpenCV, содержащий самые базовые структуры данных и функции. Он определяет наиболее часто используемые типы данных в OpenCV, такие какMat(матрица),Point、Rectи т. д. Модуль Core также предоставляет базовые математические операции, управление памятью, файловый ввод-вывод и другие функции.

  • Класс Mat:MatЭто наиболее часто используемая структура данных в OpenCV, используемая для хранения данных изображений и матриц. Это многомерный массив, который может представлять изображения в оттенках серого, цветные изображения, трехмерные матрицы и т. д.
  • Базовые операции: Модуль Core предоставляет базовые операции, такие как сложение, вычитание, умножение, деление, транспонирование и обращение матриц.

2. Модуль Imgproc

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

  • Фильтрация изображений: включая усредняющую фильтрацию, фильтрацию Гаусса, медианную фильтрацию и т.д., используемые для удаления шума на изображениях.
  • Геометрические преобразования: такие как масштабирование изображения, поворот, аффинное преобразование и т.д.
  • Обнаружение краев: например, обнаружение краев Canny, оператор Sobel и т.д.
  • Выравнивание гистограммы: используется для повышения контраста изображения.

3. Модуль Highgui

Модуль Highgui предоставляет функциональность графического пользовательского интерфейса (GUI), позволяя разработчикам создавать окна, отображать изображения, обрабатывать события мыши и клавиатуры и т.д.

  • Отображение изображения: ИспользуйтеimshowФункция может отображать изображения в окне.
  • Захват видео: ИспользуйтеVideoCaptureКласс может захватывать видеокадры с камеры или из видеофайла.
  • Обработка событий: Может обрабатывать такие события, как щелчки мыши, ввод с клавиатуры и т.д.

4. Модуль Video

Модуль Video сосредоточен на видеоанализе, предоставляя захват видео, вычитание фона, вычисление оптического потока и другие функции.

  • Захват видео: ИспользуйтеVideoCaptureКласс может читать видеокадры с камеры или из видеофайла.
  • Вычитание фона: используется для извлечения объектов переднего плана из видео.
  • Вычисление оптического потока: используется для оценки движения объектов на изображениях.

5. Модуль Calib3d

Модуль Calib3d предоставляет такие функции, как калибровка камеры, 3D-реконструкция и стереозрение. Он в основном используется для решения геометрических задач, связанных с камерой.

  • Калибровка камеры: используется для оценки внутренних и внешних параметров камеры.
  • 3D-реконструкция: восстановление 3D-сцен из нескольких изображений.
  • Стереозрение: используется для вычисления карт глубины.

6. Модуль Features2d

Модуль Features2d предоставляет функциональность обнаружения признаков и извлечения дескрипторов. Он включает множество алгоритмов обнаружения признаков, таких как SIFT, SURF, ORB и т. д.

  • Обнаружение признаков: Обнаружение ключевых точек на изображениях.
  • Извлечение дескрипторов: Генерирует дескриптор для каждой ключевой точки, используемый для сопоставления признаков на разных изображениях.

7. Модуль Objdetect

Модуль Objdetect предоставляет функциональность обнаружения объектов, в частности каскадные классификаторы на основе признаков Хаара и признаков LBP.

  • Обнаружение лиц: Использует признаки Хаара и каскадные классификаторы для обнаружения лиц на изображениях.
  • Обнаружение объектов: Может обнаруживать другие типы объектов, такие как глаза, транспортные средства и т. д.

8. Модуль ML

Модуль ML — это модуль машинного обучения, предоставляющий разнообразные алгоритмы машинного обучения, такие как машины опорных векторов (SVM), метод k ближайших соседей (KNN), деревья решений и т. д.

  • Классификация: Использует такие алгоритмы, как SVM, KNN, для классификации.
  • Регрессия: Использует такие алгоритмы, как линейная регрессия, для регрессионного анализа.
  • Кластеризация: Использует такие алгоритмы, как K-means, для кластерного анализа.

9. Модуль DNN

Модуль DNN — это модуль глубокого обучения, который предоставляет возможность загружать и запускать модели глубокого обучения. Он поддерживает несколько фреймворков глубокого обучения, таких как TensorFlow, Caffe, ONNX и т. д.

  • Загрузка модели: позволяет загружать предварительно обученные модели глубокого обучения.
  • Инференс: использует загруженные модели для таких задач, как классификация изображений, обнаружение объектов и т. д.

Установка и настройка OpenCV

Перед использованием OpenCV необходимо установить и настроить среду разработки.

Ниже приведены основные шаги установки OpenCV:

3.1 Установка OpenCV

В системах Linux можно установить OpenCV с помощью менеджера пакетов:

sudo apt-get install libopencv-dev

В Windows можно скачать предварительно скомпилированные библиотеки с официального сайта OpenCV или установить его с помощью vcpkg.

Настройка среды разработки

При использовании OpenCV в проекте на C++ необходимо связывать библиотеки OpenCV во время компиляции.

Ниже приведён простой пример конфигурации CMake:

cmake_minimum_required(VERSION 3.10)
project(OpenCVExample)

find_package(OpenCV REQUIRED)

add_executable(OpenCVExample main.cpp)

target_link_libraries(OpenCVExample ${OpenCV_LIBS})

Простой пример OpenCV

Ниже приведён простой пример использования OpenCV для чтения и отображения изображения:

Пример

#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    // Прочитать изображение
    cv::Mat image = cv::imread("example.jpg");

    // Проверить, успешно ли загрузилось изображение
    if (image.empty()) {
        std::cout << "Не удалось загрузить изображение!" << std::endl;
        return -1;
    }

    // Создать окно и отобразить изображение
    cv::namedWindow("Пример", cv::WINDOW_AUTOSIZE);
    cv::imshow("Пример", image);

    // Ожидание нажатия клавиши
    cv::waitKey(0);

    return 0;
}

В приведённом выше коде мы используемimreadфункцию для чтения изображения, используемimshowфункцию для отображения изображения и используемwaitKeyфункцию для ожидания ввода клавиши пользователем.


Материалы по OpenCV

Порядковый номер content
1 Установка OpenCV для C++
2 Базовые операции OpenCV для C++
3 Обработка изображений в OpenCV на C++
4 Базовые модули OpenCV для C++
5 Обнаружение и описание признаков в OpenCV на C++
6 Продвинутая обработка изображений в OpenCV на C++
7 Обработка видео на C++ OpenCV
8 Машинное обучение и глубокое обучение на C++ OpenCV
9 Практика проектов на C++ OpenCV
Другие расширения