Библиотека компьютерного зрения OpenCV
OpenCV (Open Source Computer Vision Library) — библиотека алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения с открытым кодом. Реализована на C/C++. Может свободно использоваться в академических и коммерческих целях.
Основные модули
- opencv_core — основная функциональность. Включает в себя базовые структуры, вычисления и линейную алгебру, ввод/вывод для XML и т. д.
- opencv_imgproc — обработка изображений (фильтрация, геометрические преобразования, преобразование цветовых пространств и т. д.).
- opencv_highgui — простой UI, ввод/вывод изображений и видео.
- opencv_ml — модели машинного обучения (SVM, деревья решений, обучение со стимулированием и т. д.).
- opencv_features2d — распознавание и описание плоских примитивов.
- opencv_video — анализ движения и отслеживание объектов.
- opencv_objdetect — обнаружение объектов на изображении (нахождение лиц, распознавание людей и т. д.).
Hello world
Давайте напишем программу Hello world с использованием библиотеки OpenCV.
#include <opencv2/opencv.hpp> using namespace cv; int main() { Mat img = imread("Hello world.png"); imshow("Hello world!", img); waitKey(0); }
Предварительно необходимо расположить файл Hello world.png
в папке вместе файлом main.cpp.
Программа отображает картинку в отдельном окне:
Выделение контуров на изображении
Теперь давайте напишем что-нибудь посложнее. Следующая программа выделяет контуры на изображении методом Canny (Canny Edge Detection).
#include <opencv2/opencv.hpp> #include "opencv2/core/core.hpp" using namespace cv; int main() { Mat src1; src1 = imread("cat.jpg", 1); namedWindow("Original image", cv::IMREAD_COLOR); imshow("Original image", src1); Mat gray, edge, draw; cvtColor(src1, gray, cv::COLOR_BGRA2GRAY); Canny(gray, edge, 50, 150, 3); edge.convertTo(draw, CV_8U); namedWindow("image", cv::WindowFlags::WINDOW_AUTOSIZE); imshow("image", draw); waitKey(0); }
Подгружаем картинку cat.jpg.
Эта картинка отобразится в отдельном окне, а затем к ней будет применен алгоритм по выделению контуров. Результат применения алгоритма также будет выведен в отдельном окне. Вот, что получилось.
Если изменять параметры функции Canny,
то количество контуров будет изменяться.
Давайте посмотрим, какой результат будет, если поменять один параметр в функции:
Canny(gray, edge, 50, 150, 5);
Контурных линий стало в разы больше.
Заключение
OpenCV - это по-настоящему мощная библиотека компьютерного зрения. С помощью нее можно решать задачи распознавания и идентификации объектов, движения, восстановления изображений и многое другое.
Системы компьютерного зрения применяются в управлении процессами, видеонаблюдении, VR/AR, вычислительной фотографии и даже в микроскопии, биомедицине и космической отрасли.