OpenCV

OpenCV
Logo OpenCV
Logo programu
Aktualna wersja stabilna 5.0.0
(6 czerwca 2026) [±]
Język programowania C / C++
System operacyjny Linux, Microsoft Windows, OS X
Rodzaj Biblioteka programistyczna
Licencja Apache License 2.0
Strona internetowa

OpenCVwieloplatformowa 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.

openFrameworks z OpenCV

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

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.