December 4, 2020

Библиотека компьютерного зрения 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);
Обработанная картинка при новых параметрах функции Canny

Контурных линий стало в разы больше.

Заключение

OpenCV - это по-настоящему мощная библиотека компьютерного зрения. С помощью нее можно решать задачи распознавания и идентификации объектов, движения, восстановления изображений и многое другое.

Системы компьютерного зрения применяются в управлении процессами, видеонаблюдении, VR/AR, вычислительной фотографии и даже в микроскопии, биомедицине и космической отрасли.