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 :

Canny et les contours horizontaux et obliques


Sujet :

OpenCV

  1. #1
    Membre averti
    Inscrit en
    Août 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 25
    Par défaut Canny et les contours horizontaux et obliques
    salut
    je viens de commencer l'apprentissage d'opencv sous visual C++, pour realiser un projet de detection de defauts.
    çà fait plus que 15 jours que je cherche une methode pour detecter des contours obliques et horizontales dans mon image mais malheureusement j'arrive à rien realiser
    quelqu'un poura me proposer un bout de code ou kelk choz qui pourra m'aider?
    merci d'avance
    cordialement
    nomidia

  2. #2
    Membre chevronné
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Par défaut
    y a un exemple tout fait fourni dans opencv.

  3. #3
    Membre averti
    Inscrit en
    Août 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 25
    Par défaut
    salut
    y a un code pour detecter les lignes ( quelques soient leurs direction) en utilisant l'algorithme de hough, mais y a pas le code de canny pour detecter les contours horizontales et obliques.
    svp, passe moi le titre de ce code et son emplacement.
    merci.
    cordialement
    nomidia.

  4. #4
    Membre chevronné
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Par défaut
    edges.c dans le répertoire samples qui se trouve lui même dans le répertoire openCV (le dossier que tu as téléchargé)

    au passage dans l'exemple avec hough il utilise canny aussi.

  5. #5
    Membre averti
    Inscrit en
    Août 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 25
    Par défaut
    j'ai trouvé la fonction de canny , merci
    mais elle detecte tous les contours.
    vs connaissez pas une maniere pour detecter juste les contours obliques et horizontales???????????
    merci
    cordialment
    nomidia

  6. #6
    Membre chevronné
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Par défaut
    doit y'avoir moyen avec hough peut être sinon je ne sais pas désolé

  7. #7
    Membre averti
    Inscrit en
    Août 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 25
    Par défaut
    esperant que çà existe.
    merci .

  8. #8
    Membre chevronné
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Par défaut
    hum avec hough tu obtiens les lignes tu peux toujour calculer l'angle entre le contour et l'horizontale et tu garde que celle qui t'interesse niveau angle

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Par défaut
    @Numidia // Kh@dij@

    sa te donne les ligne donc tu peut séléctionner celles qui t'interessent selon l'angle.
    Bon courage




    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
     
     
    int main(int argc, char* argv[]) {
     
            IplImage* image = cvLoadImage("C:\\Mohamed\\cp\\docs\\DZ.jpg");
     
            // iterate over the image data to look for very red pixels
            int height = image->height;
            int width = image->width;
            int step = image->widthStep;
     
            if(image->depth != IPL_DEPTH_8U) {
                    printf("format erroné %d\n", image->depth);
                    return -1;
            }
            unsigned char* data = (unsigned char*)image->imageData;
     
     
     
            int red_min = 150;
            int green_max = 100;
            int blue_max = 100;
     
            int found = 0;
            for(int j = 0; j < height; j++) {
                    for(int i = 0; i < width; i++) {
                            if((data[j * step + i * 3 + 2] > red_min
                               && data[j * step + i * 3 + 1] < green_max
                               && data[j * step + i * 3 + 0]  < blue_max) || 0) { 
                                    printf("found very red pixel at %4d %4d: (%3d %3d %3d)\n", 
                                           j, i, 
                                           data[j * step + i * 3 + 2], // red
                                           data[j * step + i * 3 + 1], // green
                                           data[j * step + i * 3 + 0] // blue
                                            );
                                    found ++;
                            }
                    }
            }
            printf("angle %d red-ish pixels. (%.1f%%)\n", 
                   found,
                   (double)found / (double)(width * height) * 100.);
     
            IplImage* color_dst = cvCreateImage(cvGetSize(image), 8, 3 );
            cvCopy(image, color_dst);
     
     
            IplImage* gray_image = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
            cvCvtColor(image, gray_image, CV_RGB2GRAY);
     
            CvMemStorage* storage = cvCreateMemStorage(0);
            // 2 pixel distance resolution
            // 2 degree angular resolution
            CvSeq* lines = cvHoughLines2(gray_image, storage, CV_HOUGH_STANDARD, 1, CV_PI/180. * 2, 100);
     
            for(int i = 0; i < MIN(lines->total,10); i++) {
                    float* line = (float*)cvGetSeqElem(lines, i);
                    float rho = line[0];
                    float theta = line[1];
                    printf("line %d: rho: %.1f, theta: %.1fdeg\n", i + 1, rho, theta / CV_PI * 180.);
                    CvPoint pt1, pt2;
                    double a = cos(theta), b = sin(theta);
                    double x0 = a * rho, y0 = b * rho;
                    pt1.x = cvRound(x0 + 1000*(-b));
                    pt1.y = cvRound(y0 + 1000*(a));
                    pt2.x = cvRound(x0 - 1000*(-b));
                    pt2.y = cvRound(y0 - 1000*(a));
                    cvLine(color_dst, pt1, pt2, CV_RGB(0,255,0), 1, 4);
            }
     
            cvNamedWindow("input", 1 );
            cvShowImage("input", image);
     
            cvNamedWindow("output", 1 );
            cvShowImage("output", color_dst);
     
            while(cvWaitKey(100) != 27);
    }

  10. #10
    Membre averti
    Inscrit en
    Août 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 25
    Par défaut
    salut
    merci pour vos reponses.
    @mohamed
    premierement merci
    deuxiement, je pense que y a une erreur là, car une fois j'execute le code que vous m'avez donné, il n y a que des lignes obliques en vert qui s'ajoutent à mon image, j'ai rien pigé là
    merci
    cordialement
    nomidia

  11. #11
    Membre chevronné
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Par défaut
    normal son code est fait pour afficher que ca, à toi de le modifier en ne gardant que les angles que tu estimes important pour toi.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Par défaut
    Salut Nomidia,

    En fait je t'ai signalé de bien choisir les angles que tu veux garder , car il détection tout les angles possibles.

    Dis moi où t"en es.

    Citation Envoyé par nomidia Voir le message
    salut
    merci pour vos reponses.
    @mohamed
    premierement merci
    deuxiement, je pense que y a une erreur là, car une fois j'execute le code que vous m'avez donné, il n y a que des lignes obliques en vert qui s'ajoutent à mon image, j'ai rien pigé là
    merci
    cordialement
    nomidia

Discussions similaires

  1. les contours actifs basés région
    Par hassiba_45 dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 15/03/2012, 22h34
  2. Réponses: 5
    Dernier message: 15/08/2008, 16h08
  3. Comment obtenir les contours d'Aero Glass avec Delphi ?
    Par shell13010 dans le forum Débuter
    Réponses: 7
    Dernier message: 07/05/2008, 19h30
  4. faire disparaitre les contours d'une cellule de tableau
    Par moonia dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 06/04/2006, 12h27
  5. Les contours
    Par Sten dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/09/2005, 18h45

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