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 <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функцию для ожидания ввода клавиши пользователем.