Инсталляция OpenCV
Выделение контуров на изображении
Выделение лица на изображении
Захват видеопотока с камеры и выделение контуров
Полезные ссылки
OpenCV (англ. Open Source Computer Vision Library, библиотека компьютерного зрения с открытым исходным кодом) — библиотека алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения с открытым кодом.
Инсталляция OpenCV
Загружаю OpenCV-3.4.3-vc14-vc15 для Windows (у меня на компьютере Windows 10)
Тестирование OpenCV проводил для Visual Studio 2015, которая на тот момент была установлена у меня на компьютере. Возможна ли работа OpenCV 3.4.3-vc14-vc15 с другими версиями Visual Studio утверждать не берусь, смущают суффиксы в названии OpenCV 3.4.3-vc14-vc15 .
Распаковываю OpenCV в корень диска С. Для этого запускается файл OpenCV-3.4.3_vc14_vc15.exe и указывается директория.
Перед запуском 3.4.3_vc14_vc15.exe директорию opencv создавать не нужно. Она создается автоматически при распаковке.
Выполняю настройки в Windows. Выхожу на окно «Изменить переменную среды» (в Windows 10 — кнопки Windows->Служебные->Панель управления -> Система и безопасность -> Система -> Дополнительные параметры системы -> Переменные среды -> Path ->Изменить). В этом окне создаю переменную C:\opencv\build\x64\vc14\bin. Перезагружаю Windows.
Запускаю Visual Studio и создаю проект консольного приложения: File -> New -> Project -> Visual C++ -> Win32 -> Win32 Consol Application -> Next -> Empty Project -> Finish.
Устанавливаю платформу к x64:
Добавляю в проект файл main.cpp , пока ничего в него не записываю.
Выполняю Right click на имени проекта в окне Solution Explorer и в контекстном меню перехожу к вкладке “Properties”.
В открывшемся окне «Property Pages» выполняю действия:
- C/C++ -> General -> Additional Include Directories -> C:\opencv\build\include
- Linker -> General -> Additional Library Directories -> C:\opencv\build\x64\vc14\lib
- Linker -> Input -> Additional Dependencies -> opencv_world343.lib;opencv_world343d.lib;
Обратите внимание, что цифры в имени файлов opencv_world343.lib и opencv_world343d.lib соответствуют цифрам в имени версии OpenCV 3.4.3-vc14-vc15. Например, для версии OpenCV 3.4.1-vc14-vc15 нужно ссылаться в установках проекта уже на файлы opencv_world341.lib и opencv_world341d.lib.
Копирую и вставляю код в файл main.cpp
#include <opencv2/opencv.hpp> using namespace cv; int main() { Mat img(Mat::zeros(300, 300, CV_8U)); imshow("window", img); waitKey(); return 0; }
Запускаю программу, получаю вот такой результат — появляются окно консоли и окно для отображения графики.
Выделение контуров на изображении
Программа выделяет контуры на изображении методом Canny (Canny Edge Detection).
Для запуска приложения необходимо поместить файл lena.jpg (скачать lena.zip) в директорию проекта, где находится исходный файл (main.cpp).
#include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "iostream" using namespace cv; using namespace std; int main() { Mat src1; src1 = imread("lena.jpg", CV_LOAD_IMAGE_COLOR); namedWindow("Original image", CV_WINDOW_AUTOSIZE); imshow("Original image", src1); Mat gray, edge, draw; cvtColor(src1, gray, CV_BGR2GRAY); Canny(gray, edge, 50, 150, 3); edge.convertTo(draw, CV_8U); namedWindow("image", CV_WINDOW_AUTOSIZE); imshow("image", draw); waitKey(0); return 0; }
Выделение лица на изображении
Программа выделяет лицо на изображении, используя классификатор Haar-Cascade.
Для запуска приложения необходимо поместить файл изображения lena.jpg (lena.zip) и файл каскада haarcascade_frontalface_alt2.xml в директорию проекта, где находится исходный файл (main.cpp). Файлы каскадов находятся в директории c:\opencv\build\etc\…
При запуске программа выдавала ошибку, если в установках проекта было Debug. Поменял на Release, запуск успешный.
#include "opencv2/objdetect/objdetect.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> #include <stdio.h> using namespace std; using namespace cv; int main() { Mat image; image = imread("lena.jpg", CV_LOAD_IMAGE_COLOR); namedWindow("window1", 1); imshow("window1", image); // Load Face cascade (.xml file) CascadeClassifier face_cascade; face_cascade.load("haarcascade_frontalface_alt2.xml"); // Detect faces std::vector<Rect> faces; face_cascade.detectMultiScale(image, faces, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30)); // Draw circles on the detected faces for (int i = 0; i < faces.size(); i++) { Point center(faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5); ellipse(image, center, Size(faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0); } imshow("Detected Face", image); waitKey(0); return 0; }
Захват видеопотока с камеры и выделение контуров
Для кода ниже требуется веб-камера, подключенная к компьютеру, она захватывает изображение с камеры. Изображение подвергается обработке — выделяются контуры методом Canny
#include <opencv2/opencv.hpp> using namespace cv; int main() { Mat img; VideoCapture cap(0); while (true) { cap >> img; Mat edges; cvtColor(img, edges, CV_BGR2GRAY); Canny(edges, edges, 30, 60); imshow("window label", edges); waitKey(1); } return 0; }
Полезные ссылки
Автор: Николай Свирневский