IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenCV Discussion :

Comment fonctionne la fonction cvHaarDetectObjects ?


Sujet :

OpenCV

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 220
    Points : 167
    Points
    167
    Par défaut Comment fonctionne la fonction cvHaarDetectObjects ?
    bonjour,

    je voudrais savoir en détail comment cette fonction effectue des correspondance avec le fichier de cascade. Utilise-t-elle les formes, les histogramme de couleurs, ...?

    merci

  2. #2
    Membre actif Avatar de gassi64
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 255
    Points : 230
    Points
    230
    Par défaut
    La bible OpenCV (pour moi) :
    http://www.cs.indiana.edu/cgi-pub/ol...te/OpenCVHelp/

    Voilà un exemple qui peut t'aider:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    #include "cv.h"
    #include "highgui.h"
     
    CvHaarClassifierCascade* load_object_detector( const char* cascade_path )
    {
        return (CvHaarClassifierCascade*)cvLoad( cascade_path );
    }
     
    void detect_and_draw_objects( IplImage* image,
                                  CvHaarClassifierCascade* cascade,
                                  int do_pyramids )
    {
        IplImage* small_image = image;
        CvMemStorage* storage = cvCreateMemStorage(0);
        CvSeq* faces;
        int i, scale = 1;
     
        /* if the flag is specified, down-scale the input image to get a
           performance boost w/o loosing quality (perhaps) */
        if( do_pyramids )
        {
            small_image = cvCreateImage( cvSize(image->width/2,image->height/2), IPL_DEPTH_8U, 3 );
            cvPyrDown( image, small_image, CV_GAUSSIAN_5x5 );
            scale = 2;
        }
     
        /* use the fastest variant */
        faces = cvHaarDetectObjects( small_image, cascade, storage, 1.2, 2, CV_HAAR_DO_CANNY_PRUNING );
     
        /* draw all the rectangles */
        for( i = 0; i < faces->total; i++ )
        {
            /* extract the rectanlges only */
            CvRect face_rect = *(CvRect*)cvGetSeqElem( faces, i, 0 );
            cvRectangle( image, cvPoint(face_rect.x*scale,face_rect.y*scale),
                         cvPoint((face_rect.x+face_rect.width)*scale,
                                 (face_rect.y+face_rect.height)*scale),
                         CV_RGB(255,0,0), 3 );
        }
     
        if( small_image != image )
            cvReleaseImage( &small_image );
        cvReleaseMemStorage( &storage );
    }
     
    /* takes image filename and cascade path from the command line */
    int main( int argc, char** argv )
    {
        IplImage* image;
        if( argc==3 && (image = cvLoadImage( argv[1], 1 )) != 0 )
        {
            CvHaarClassifierCascade* cascade = load_object_detector(argv[2]);
            detect_and_draw_objects( image, cascade, 1 );
            cvNamedWindow( "test", 0 );
            cvShowImage( "test", image );
            cvWaitKey(0);
            cvReleaseHaarClassifierCascade( &cascade );
            cvReleaseImage( &image );
        }
     
        return 0;
    }
    The function cvHaarDetectObjects finds rectangular regions in the given image that are likely to contain objects the cascade has been trained for and returns those regions as a sequence of rectangles. The function scans the image several times at different scales (see cvSetImagesForHaarClassifierCascade). Each time it considers overlapping regions in the image and applies the classifiers to the regions using cvRunHaarClassifierCascade. It may also apply some heuristics to reduce number of analyzed regions, such as Canny prunning. After it has proceeded and collected the candidate rectangles (regions that passed the classifier cascade), it groups them and returns a sequence of average rectangles for each large enough group. The default parameters (scale_factor=1.1, min_neighbors=3, flags=0) are tuned for accurate yet slow object detection. For a faster operation on real video images the settings are: scale_factor=1.2, min_neighbors=2, flags=CV_HAAR_DO_CANNY_PRUNING, min_size=<minimum possible face size> (for example, ~1/4 to 1/16 of the image area in case of video conferencing).

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 61
    Points : 44
    Points
    44
    Par défaut
    merci pour l'adresse du site !!! je connaissais pas mais il a l'air super complet avec des explications différentes de la doc openCV c'est parfait tout ça !!!

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 220
    Points : 167
    Points
    167
    Par défaut
    merci aussi pour le lien.

    ce que je cherche à savoir, c'est comment l'algo "match" les rectangles de l'image qu'il a choisit avec les données de la cascade. se base-t-il sur les couleurs, les formes, les deux, ou autre chose ?

Discussions similaires

  1. [interp2] Comment fonctionne cette fonction ?
    Par rom3478 dans le forum MATLAB
    Réponses: 3
    Dernier message: 03/11/2010, 21h39
  2. Comment fonctionne la fonction the_post() de wordpress ?
    Par Aleanar dans le forum WordPress
    Réponses: 2
    Dernier message: 13/12/2009, 18h00
  3. Comment fonctionne la fonction find en perl
    Par lavm01 dans le forum Langage
    Réponses: 2
    Dernier message: 10/01/2008, 17h28
  4. Comment fonctionne la fonction mahal ?
    Par leFeu dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 09/01/2008, 16h35
  5. [ImageMagick] Comment fonctionne la fonction imagefttext ?
    Par Dsphinx dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 30/11/2006, 11h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo