OpenCV
Logo programu | |
Aktualna wersja stabilna | 4.10.0 (4 czerwca 2024) [±] |
---|---|
Język programowania | C / C++ |
System operacyjny | Linux, Microsoft Windows, OS X |
Rodzaj | Biblioteka programistyczna |
Licencja | Apache License 2.0 |
Strona internetowa |
OpenCV – wieloplatformowa biblioteka funkcji wykorzystywanych podczas obróbki obrazu, oparta na otwartym kodzie i zapoczątkowana przez Intela. Jej autorzy skupiają się na przetwarzaniu obrazu w czasie rzeczywistym.
Wymagania dla Windows
Aby stworzyć niektóre fragmenty oprogramowania dotyczące zagadnień wejścia sygnału (z kamer) konieczne jest zainstalowanie bibliotek SDK DirectShow. Biblioteki te można znaleźć w podkatalogu Samples\Multimedia\DirectShow\BaseClasses
Platformy SDK Microsoftu; po ściągnięciu należy je odpowiednio zainstalować, aby można było tworzyć oprogramowanie w OpenCV. Ponadto w celu korzystania z mechanizmów wielowątkowych konieczna jest instalacja biblioteki TBB Intela.
Języki programowania
Biblioteka została stworzona w języku C++, lecz istnieją nakładki umożliwiające korzystanie z niej również w językach C#, Python, Java (np. Emgu CV, JavaCV), JS (Node.js).
Przykładowy kod programu
Kod napisany w języku C++. Wykorzystuje opisywaną bibliotekę. Jest to kod pozwalający na śledzenie, detekcję twarzy.
#include "opencv2/objdetect.hpp" #include "opencv2/highgui.hpp" #include "opencv2/imgproc.hpp" #include "opencv2/videoio.hpp" #include <iostream> using namespace std; using namespace cv; void wykryjIWyswietl( Mat frame ); // CascadeClassifier face_cascade; CascadeClassifier eyes_cascade; int main( int argc, const char** argv ) { CommandLineParser parser(argc, argv, "{help h||}" "{face_cascade|data/haarcascades/haarcascade_frontalface_alt.xml|Path to face cascade.}" "{eyes_cascade|data/haarcascades/haarcascade_eye_tree_eyeglasses.xml|Path to eyes cascade.}" "{camera|0|Camera device number.}"); parser.about( "\nJest to demonstracyjny program wykorzystujący klasę cv::CascadeClassifier do" "wykrywania obiektów (Face + eyes) w strumieniu wideo.\n" "Można wykorzystać funkcjonalności Haar lub LBP.\n\n" ); parser.printMessage(); String face_cascade_name = samples::findFile( parser.get<String>("face_cascade") ); String eyes_cascade_name = samples::findFile( parser.get<String>("eyes_cascade") ); //-- 1. Ładowanie klasyfikatora kaskadowego - Haar if( face_cascade.load( face_cascade_name ) == 0 ) { cout << "Błąd wczytywania klasyfikatora twarzy! \n"; return -1; }; if( eyes_cascade.load( eyes_cascade_name ) == 0 ) { cout << "Błąd wczytywania klasyfikatora oczu! \n"; return -1; }; int camera_device = parser.get<int>("camera"); VideoCapture capture; //-- 2. Otwieranie strumienia wideo capture.open( camera_device ); if ( capture.isOpened() == 0 ) { cout << "Nie udało się otworzyć strumienia wideo \n"; return -1; } Mat frame; while ( capture.read(frame) ) { if( frame.empty() ) { cout << "Brak ramki. -- Wyjście z pętli! \n"; break; //wyjście z pętli } //-- 3. Stosowanie klasyfikatorów do bieżącej ramki wideo wykryjIWyswietl( frame ); //Główna funkcja, zawiera główny algorytm if( waitKey(10) == 27 ) break; // wyjście z pętli } return 0; } void wykryjIWyswietl( Mat frame ) { Mat frame_gray; cvtColor( frame, frame_gray, COLOR_BGR2GRAY ); equalizeHist( frame_gray, frame_gray ); //-- Wykrywaj twarze std::vector<Rect> faces; face_cascade.detectMultiScale( frame_gray, faces ); for ( size_t i = 0; i < faces.size(); i++ ) { Point center( faces[i].x + faces[i].width/2, faces[i].y + faces[i].height/2 ); ellipse( frame, center, Size( faces[i].width/2, faces[i].height/2 ), 0, 0, 360, Scalar( 255, 0, 255 ), 4 ); Mat faceROI = frame_gray( faces[i] ); //-- Dla każdej twarzy, szukaj oczu (wykrywaj) std::vector<Rect> eyes; eyes_cascade.detectMultiScale( faceROI, eyes ); for ( size_t j = 0; j < eyes.size(); j++ ) { Point eye_center( faces[i].x + eyes[j].x + eyes[j].width/2, faces[i].y + eyes[j].y + eyes[j].height/2 ); int radius = cvRound( (eyes[j].width + eyes[j].height)*0.25 ); circle( frame, eye_center, radius, Scalar( 255, 0, 0 ), 4 ); } } //-- Prezentowanie wyniku pracy algorytmu imshow( "Przechwycony obraz - Wykrywanie twarzy", frame ); }
Linki zewnętrzne
- Oficjalna strona projektu (ang.)
- Strona projektu na SourceForge (ang.)
- Metody przetwarzania obrazów z wykorzystaniem biblioteki OpenCV - praca dyplomowa AGH (pl.)