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 :

Optimiser cvMatchTemplate


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Space23
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 185
    Par défaut Optimiser cvMatchTemplate
    Bonjour,

    Voila j'ai un petit programme c++ qui m'effectue une recherche de pattern sur une image.
    A chaque pattern trouvé je dessine un cercle à l'emplacement du pattern et je ré-éffectue la recherche jusqu'à que je trouve tous les occurrences du partern. J'obtiens alors la localisation de chaque occurrence du pattern sur mon image.

    J'utilise la fonction cvMatchTemplate d'openCV mais je trouve cette recherche trop lente! Il y aurait-il un moyen de l'optimiser, en utilisant un autre mode de recherche par exemple (j'utilise CV_TM_CCOEFF_NORMED). Je ne comprend rien aux différents mode expliqué dans la doc : http://opencv.willowgarage.com/docum...tml#index-1172

    J'ai également vu qu'un développeur avait ré-implémenter la fonction cvMatchTemplate pour qu'elle soit plus rapide (ici), est-ce que cette solution est viable?

    Voici mon code si vous avez des idées pour l'optimiser, il y a surement un moyen mais je n'y connais vraiment pas grand chose à OpenCV et en reconnaissance d'image en général.

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    int main(int argc, char *argv[])
    {
       argv[1] = "capture/pattern1.jpg";
     
       IplImage *templ;
       IplImage *src;
       IplImage *result;
       double   seuil;
       int      x;
       int      y;
       double   min_val = 0;
       double   max_val = 0;
       float    src_x;
       float    src_y;
       CvPoint  max_loc;
       CvPoint  min_loc;
     
       /* Récupération de l'image et du template, format jpeg */
       templ= cvLoadImage(argv[1], 0);
       if(!templ){
                cout<<("Erreur lors du chargement de l'image : ");
                system("pause");
                exit(EXIT_FAILURE);
       }
       src = cvLoadImage("E:\\Image\\Image.jpg", 0);
       if(!src){
                cout<<("Erreur lors du chargement de l'image : %s\n");
                system("pause");
                exit(EXIT_FAILURE);
       }
     
     
       CvRect roi = cvRect(430,200,500,500);
       cvSetImageROI(src,roi);
       src = cvCloneImage(src);
     
        seuil = 0.800000;
     
        bool encore = true;
        fichier << argv[1] << endl;
        while (encore) {
     
           /* Récupération des valeurs nécessaires pour la création de l'image résult   */
           src_x = cvGetSize(src).width;
           src_y = cvGetSize(src).height;
           x = (int)src_x- cvGetSize(templ).width +1;
           y = (int)src_y - cvGetSize(templ).height +1;
           result = cvCreateImage(cvSize(x,y),IPL_DEPTH_32F,1);
     
           /* Utilisation de cvMatchTemplate */
           cvMatchTemplate(src, templ, result, CV_TM_SQDIFF_NORMED);
     
           /* Recherche des résultats */
          min_val = 0;
           max_val = 0;
           max_loc = cvPoint(500,500);
           min_loc = cvPoint(100,100);
           cvMinMaxLoc(result, &min_val, &max_val, &min_loc, &max_loc, 0);
     
           /* J'entoure le template par un cercle */
           if (max_val > seuil)
           {
               int xxx = max_loc.x + 15;
               int yyy = max_loc.y + 20;
              //printf("Template trouvé, eureka !\n");
               cvCircle(src, cvPoint(xxx, yyy), 30, CV_RGB(255, 50, 50), -1, 8, 0);
           }
           else
           {
               //printf("Template non trouvé !\n");
               encore = false;
           }
      }
     
       /* Libération de la mémoire */
      cvReleaseImage(&templ);
       cvReleaseImage(&src);
       cvReleaseImage(&result);
     
     
       }
       return(EXIT_SUCCESS);

  2. #2
    Membre chevronné
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Par défaut
    tu veux tous les patterns de ton image ou toutes les occurences d'un pattern bien précis ?

    est-ce que cette solution est viable
    elle est sur le site officiel donc je dirais oui

  3. #3
    Invité
    Invité(e)
    Par défaut
    tu veux tous les patterns de ton image ou toutes les occurences d'un pattern bien précis ?
    Oui j'ai l'impression aussi qu'il y a une erreur dans le while. Je ne comprends pas l'interêt de cette boucle ?

Discussions similaires

  1. Optimisation de votre SGBDR et de vos requêtes...
    Par SQLpro dans le forum Langage SQL
    Réponses: 35
    Dernier message: 11/01/2013, 11h49
  2. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 4
    Dernier message: 05/02/2003, 08h54
  3. [VB6] [BDD] Optimisation de l'accès aux données
    Par LadyArwen dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 30/01/2003, 13h27
  4. [langage]Problème de temps de lecture, optimisation
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 08/01/2003, 08h47
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24

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