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 :

Explications sur le fonctionnement de cv::findContours


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 9
    Par défaut Explications sur le fonctionnement de cv::findContours
    slt, s'il ya qq qui peut m'aider d'expliquer comme elle fonctionne cette instruction en détail et avec quelle méthode : gradient ou laplacien. s'il y a des tutoriels qui explique bien cette instruction et merci d'avance

  2. #2
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 38
    Par défaut
    Dans quel but veux-tu l'utiliser ?
    La doc est fourni sur le sujet : http://docs.opencv.org/modules/imgpr... Point offset)

    En entrée, findContours prend une image en niveau de gris (CV_8UC1), une variable de stockage des points formant les contours trouvées (std::vector<std::vector<cv:oint> > contours) et des paramètres sur la forme dans laquelle tu veux que les points soit stockés.

    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cv::Mat image_en_niveau_de_gris = cv::imread("image.jpg", CV_LOAD_IMAGE_GRAYSCALE);
    std::vector<std::vector<cv::Point> > contours;
    cv::findContours(image_en_niveau_de_gris, contours, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);
    Avec ces paramètres, tu vas récupérer chaque contours séparément (CV_RETR_LIST) et tu aura tous les points formant le contours (pas d'approximation polygonale ou autre) (CV_CHAIN_APPROX_NONE).

    Une méthode qui peut te permettre d'afficher les contours ainsi obtenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void drawContour(cv::Mat& image, std::vector<cv::Point> contour)
    {
    for(int i = 0; i < contour.size(); i++)
    {
    	cv::Vec3b couleur (rand()%127 + 127, rand()%127 + 127, rand()%127 + 127);
    	for(int j = 0; j < contour.at(i).size(); j++)
    	{
    		image.at<cv::Vec3b>(contour.at(i).at(j)) = couleur;
    	}
    }
    }
    appelé comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cv::Mat image = cv::Mat::zeros(image_en_niveau_de_gris.size(), CV_8UC3);
    drawContour(image, contours);
    cv::imwrite("resultat_contour.jpg", image);
    Il existe d'autres paramètres suivant les cas qui peuvent être intéressant, je te laisse la doc.

  3. #3
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 9
    Par défaut
    merci pour la réponse, j'ai utilisé cette fonction dans mon code et j'ai compris sa fonctionnement pratiquement mais j'ai pas trouvé comment elle fonctionne théoriquement. s'il ya quelques théories de base de cette fonction

  4. #4
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 54
    Par défaut
    2 choses:
    - En lisant la documentation donnée en lien par supernovagm, tu aurais pu voir ceci:
    The function retrieves contours from the binary image using the algorithm [Suzuki85]
    qui référence ce livre:
    Suzuki, S. and Abe, K., Topological Structural Analysis of Digitized Binary Images by Border Following. CVGIP 30 1, pp 32-46 (1985)
    Ca fait un bon point de départ si tu veux plus de renseignements. Ensuite, tu as toujours la possibilité d'aller farfouiller dans le code.
    - Pour afficher les contours trouvés, nul besoin d'écrire une méthode drawContour! Il y en a déjà une toute faite dans OpenCV.

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/12/2014, 12h27
  2. Réponses: 11
    Dernier message: 06/11/2013, 13h39
  3. Réponses: 2
    Dernier message: 12/04/2011, 15h05
  4. [SOAP][XML-RPC] Besoin d'explications sur le fonctionnement
    Par walid0577 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 01/05/2007, 18h52
  5. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18

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