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 :

Impossible d'utiliser watershed ()


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Par défaut Impossible d'utiliser watershed ()
    Bonjour,

    Je crée un projet OpenCV 3.2 sous Qt creator,
    et impossible de faire appel à watershed.
    Mes arguments ne passent jamais.

    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
     
    void Traitement :: Watershed (Image &image)
    {
     
        Mat gray, thresh ;
        cvtColor(image.getResult(), gray, COLOR_BGR2GRAY);
        threshold(gray, thresh, 0, 255, THRESH_OTSU);
     
     
        // Traitement avant-plan
        Mat foreground;
        erode( thresh, foreground, Mat(), Point(-1, -1), 2 );
     
     
        // Traitement arrière plan
        Mat background, back;
        dilate ( thresh, background, Mat(), Point(-1, -1), 3 );
        threshold(background, back, 1, 128, 1);
     
     
        // Création des marqueurs
        Mat markers ;
        markers = foreground + back;
     
     
        Mat markers32, img;
     
     
        // Le problème commence à la conversion (image noire)
        markers.convertTo(markers32, CV_32SC1);
        gray.convertTo(img, CV_8UC3);
     
        watershed(img, markers32);
     
        image.setResult(markers32);
        image.addTraitement("Watershed");
    }

    J'ai vérifié tout au long de ma création du programme,
    et l'image des marqueurs(markers) apparait bien.

    Lorsque je la transforme en 32 bits, elle devient noire, mais c'est peut-être un problème d'affichage de imshow.
    Par contre absolument impossible d'utiliser watershed(). Commenté ça marche, décommenté, ça plante...


    Merci pour vos conseils.

    Cordialement.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Par défaut Solution
    Bonjour,

    J'ai trouvé. watershed() ne prend pas les images en niveaux de gris, mais en couleur.
    C'est pour cela que ça plantait.

    J'en ai profité pour vérifier absolument toutes mes images intermédiaires,
    et je me suis rendu compte que les résultats étaient inversés par rapport à mes images,
    d'où un bitwise_not pour obtenir l'image complément et remettre tout dans le bon sens.

    Maintenant tout fonctionne parfaitement. J'obtient les résultats attendus.

    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
     
    void Traitement :: Watershed (Image &image)
    {
     
        Mat gray, thresh, complement ;
        cvtColor(image.getMat(), gray, COLOR_BGR2GRAY);
        threshold(gray, thresh, 0, 255, THRESH_BINARY | THRESH_OTSU);
        bitwise_not ( thresh, complement ); // image complement : inversion bits B&W
        gray.release();
        thresh.release();
     
     
        // Traitement avant-plan
        Mat foreground;
        erode( complement, foreground, Mat(), Point(-1, -1), 2 ); //2
     
     
        // Traitement arrière plan
        Mat background, back;
        dilate ( complement, background, Mat(), Point(-1, -1), 3 ); //3
        complement.release();
        threshold(background, back, 1, 128, 1);
        background.release();
     
     
        // Création des marqueurs
        Mat markers ;
        markers = foreground + back;
        foreground.release();
        back.release();
     
     
        // Préparation watershed
        Mat markers32, originale;
        markers.convertTo(markers32, CV_32SC1);
        image.getMat().convertTo(originale, CV_8UC3);
        watershed(originale, markers32);
        originale.release();
        markers.release();
     
     
        // Conversion résultat pour affichage
        Mat result;
        markers32.convertTo(result, CV_8U, 255, 255);
        markers32.release();
     
        image.setMat(result);
        result.release();
        image.addTraitement("Watershed");
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Impossible d'utiliser KDE
    Par Thrystan dans le forum KDE
    Réponses: 1
    Dernier message: 05/01/2006, 16h01
  2. DAO impossible d'utiliser une fonction dans un requete
    Par exter666 dans le forum VBA Access
    Réponses: 10
    Dernier message: 24/09/2005, 17h15
  3. Impossible d'utiliser DISTINCT avec des types image et ntext
    Par azlinch dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/08/2005, 17h43
  4. impossible d'utiliser un HWND parent dans un thread
    Par sylvain114d dans le forum Windows
    Réponses: 12
    Dernier message: 23/09/2004, 12h21
  5. impossible d'utiliser ma fonction dans un insert
    Par caramel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/04/2003, 15h04

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