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 :

Détection des petits cercles dans une image


Sujet :

OpenCV

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 19
    Points : 16
    Points
    16
    Par défaut Détection des petits cercles dans une image
    salut

    je travaille sur un projet qui consiste à détecter les petites cercles manométriques dans les images , j'ai utilisé la fonction cvHoughCircles de la bibliothèque opencv
    mais elle m as détecté des cercles avec aucun sens si quelqu’un a une idée ou déjà travailler sur ça peut m aider et merci d avance
    voila le code que j ai utilisé
    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
    #include <cv.h>
    #include <highgui.h>
    #include<stdio.h>
    #include<iostream>
    #include<math.h>
    #include<cxcore.h>
    #include<cvaux.h>
     
    using namespace std;
    int main()
    {
    //Déclaration
    IplImage*image;
    IplImage*grise;
    //IplImage*image_cercle;
    IplImage*image_binaire;
    CvSeq*circles;
    CvMemStorage*storage = cvCreateMemStorage(0);
     
     
    // charger une image
    image=cvLoadImage("img.jpg");
    if (image == NULL)
    {
    cout << "impossible d'ouvrir le fichier";
    exit(EXIT_FAILURE);
    }
    //On vérifie l'origine de l'image chargée
    //Si elle n'est pas en haut à gauche, il faut la corriger
    int flip=0;
    if(image->origin!=IPL_ORIGIN_TL)
    {
    flip=CV_CVTIMG_FLIP;
    }
    grise=cvCreateImage(cvGetSize(image),image->depth,1);
    if (grise == NULL)
    {
    cout << "impossible de creer image grise";
    exit(EXIT_FAILURE);
    }
     
    cvCvtColor(image,grise,CV_BGR2GRAY);
    cvSmooth( grise,grise, CV_GAUSSIAN, 3, 3);
    image_binaire=cvCreateImage(cvGetSize(image),8,1);
    cvThreshold(grise,image_binaire,100,255,CV_THRESH_BINARY);
     
    circles = cvHoughCircles(image_binaire, storage, CV_HOUGH_GRADIENT, 2,image_binaire->height/4,100, 100,0,300);
    for(int i = 0; i < circles->total; i++ )
    {
     
    float* p = (float*)cvGetSeqElem( circles, i );
    cvCircle( image_binaire, cvPoint(cvRound(p[0]),cvRound(p[1])), 3, CV_RGB(0,255,0), -1, 8, 0 );
    cvCircle( image_binaire, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(255,134,180), 3, 8, 0 );
    }
     
     
     
    //Création des fenêtres dans lesquelles nous afficherons les images
    cvNamedWindow("Affichage image Initiale", CV_WINDOW_AUTOSIZE);
    cvShowImage("Affichage image Initiale", image);
    cvNamedWindow("Affichage image grise", CV_WINDOW_AUTOSIZE);
    cvShowImage("Affichage image grise",grise);
    cvNamedWindow("Affichage image binaire",CV_WINDOW_AUTOSIZE);
    cvShowImage("Affichage image binaire",image_binaire);
     
    //cvNamedWindow("Affichage image cercle", CV_WINDOW_AUTOSIZE);
    // cvShowImage("Affichage image cercle",image_cercle);
     
    cvWaitKey(0);
    cvDestroyWindow("Affichage image Initiale");
    cvDestroyWindow("Affichage image grise");
    //cvDestroyWindow("Affichage image cercle");
    cvDestroyWindow("Affichage image binaire");
    cvReleaseImage(&image);
    cvReleaseImage(&grise);
    cvReleaseImage(&image_binaire);
    //cvReleaseImage(&image_cercle);
     
    return 0;
     
    }

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Points : 533
    Points
    533
    Par défaut
    Coucou

    Un petit screen du résultat ? le problème vient je pense du filtre

Discussions similaires

  1. eliminer des petits objets dans une image
    Par afef_master dans le forum Traitement d'images
    Réponses: 13
    Dernier message: 15/02/2013, 23h59
  2. Détection et localisation des codes-barres dans une image
    Par ayoub89 dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 17/02/2012, 11h51
  3. un demi cercle dans une image
    Par sali lala dans le forum C#
    Réponses: 1
    Dernier message: 05/01/2009, 21h15
  4. Détection de cercles dans une image
    Par abs2008 dans le forum Images
    Réponses: 6
    Dernier message: 29/05/2008, 13h47
  5. [ImageMagick] Détection des couleurs approximative d'une image ?
    Par SkyDev dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 18/01/2006, 14h17

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