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 de forme et de couleur


Sujet :

OpenCV

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Points : 165
    Points
    165
    Par défaut Détection de forme et de couleur
    Bonjour,

    J'essaye de faire de la détection de formes et couleurs avec OpenCV. On trouve pas mal de tutos bien faits sur Internet et j'arrive donc à faire ce que je cherche à faire.

    Nom : triangle_ok2.png
Affichages : 2299
Taille : 118,4 KoNom : triangle_ok3.png
Affichages : 2394
Taille : 1,8 Ko

    Mais ça dépend de l'heure... Je m'explique: lorsque il y a du soleil ça fonctionne avec certains paramètres, quand il y en a moins ça fonctionne avec d'autres et quand j'allume la lumière encore avec d'autres. Mon triangle rose n'a jamais la même couleur en fonction de l'éclairage.

    Nom : triangle_ko2.png
Affichages : 2340
Taille : 167,4 Ko

    Comme il n'est pas envisageable de changer les paramètres de la couleur et les seuils pour la détection des contours en fonction de l'heure et de la météo, est ce qu'il n'y aurait pas un moyen de normaliser l'affichage de façon à ce que l'éclairage ne joue pas (cad que quel que soit l'éclairage, on arrive à peu près toujours à la même image). Parce que les tutos indiquaient de travailler en HSV pour limiter les problèmes d'éclairage mais dans mon cas ça ne change pas grand chose.

    Merci d'avance.

  2. #2
    Membre actif

    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Janvier 2008
    Messages : 170
    Points : 202
    Points
    202
    Par défaut Reglage caméra avec cv::VideoCapture
    Bonjour,

    ce qu'il te manque c'est de contrôler ta caméra. Tu peux regarder la doc de la fonction cv::VideoCapture::Set( ... ) ici

    Il y a deux paramètre avec lesquels tu puisse jouer : c'est le temps d'exposition de ton capteur pour une image, ou le gain de celui-ci. Cela s’évitera d'avoir des images saturées au moindre rayon de soleil. Soit tu essais de gérer cela grâce au panneau de contrôle fourni par le soft de ta cam, soit tu passe par cv::VideoCapture::Set( ... )

    Le probleme c'est que toutes les caméras ne supportent pas toutes les fonctions, et en plus elles ne sont pas toutes décries dans la doc.

    utilise CV_CAP_PROP_AUTO_EXPOSURE = 1 ca devrait marcher. Tu fait ensuite un get(CV_CAP_PROP_AUTO_EXPOSURE) pour vérifier que ta valeur est bien passé.

    Mais le problème le plus embettant c'est la gestion de la couleur. Ne t'imagine pas pouvoir faire de l'analyse colorimétrique fine si tu ne contrôle pas la source de lumière, à moins de pouvoir faire des balances des blancs avant chaque mesure.

    Voila, en espérant que ca t'aidera

  3. #3
    Futur Membre du Club
    Homme Profil pro
    PhD Student
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : PhD Student
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    C'est sûr qu'avec une bonne acquisition d'image c'est toujours mieux.

    Sinon, as-tu essayé de passer en HSV et de définir une plage de teinte en H pour détecter ton rose?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cvtColor(frame, hsv, CV_BGR2HSV); // filtrer médian avant pour enlever du bruit du capteur
    inRange(hsv, Scalar(X, X, X), Scalar(X, X, X), mask); // Bidouiller les valeurs X
    Pour la détection de forme, tu as les méthodes Hough, les analyses de contours ou analyses de blobs.
    J'avais fait une détection de cercle temps réel en recodant l'équivalent de regionProps de Matlab, avec les bounding box, aire etc.
    Pour les blobs ça dépendra du seuillage, essaye adaptative threshold ou Otsu, même si Ostu ne gérera sûrement pas les gradients d'intensité avec le soleil, mais c'est facile à tester.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    adaptiveThreshold(img, binary, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY, 11, 2); // ou CV_ADAPTIVE_THRESH_MEAN_C
    // ou
    threshold(img, binary, 100, 255, CV_THRESH_OTSU);
    Hope that helps!

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Points : 165
    Points
    165
    Par défaut
    Bonjour,

    Désolé pour le retard dans la lecture de vos réponses mais je n'ai pas eu le temps de me consacrer à ce projet depuis 1 mois.

    @velkouby: Merci pour l'info, je ne connaissais pas. Sur la webcam que j'ai acheté (j'ai pris la moins cher que j'ai trouvé pour pouvoir faire des tests) ça ne change rien. Je réessayerai plus tard avec la caméra du Raspberry Pi qui est la plateforme cible.

    @ThomCastel: Oui j'ai essayé de passer en HSV et de définir une plage. Ce qui me gène c'est que pour que ça fonctionne dans tous les cas, la plage est de 100 ce qui est énorme ! Je détecte donc le rose mais aussi le rouge et le violet.
    Pour la détection de forme j'ai utilisé Canny (mais sans trop savoir quelle valeur mettre pour les seuils) puis une détection de contours.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Imgproc.Canny(greyImage, edges, 100, 150, 3, true);
    Imgproc.findContours(edges, contours, new Mat(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
    Je fais ensuite une approximation polygonale et je ne garde que les contours qui ont 3 points et font plus d'une certaine taille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for (MatOfPoint contour : contours)
    {
        final MatOfPoint2f approxCurve = new MatOfPoint2f();
        Imgproc.approxPolyDP(new MatOfPoint2f(contour.toArray()), approxCurve, Imgproc.arcLength(new MatOfPoint2f(contour.toArray()), true) * 0.05, true);
        final List<Point> contourApproxPoints = approxCurve.toList();
        if (contourApproxPoints.size() == 3)
        {
            if ((Math.abs(Imgproc.contourArea(approxCurve)) > 200) /* && (Imgproc.isContourConvex(contour)) */)
    	{
              [...]
            }

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/02/2007, 17h18
  2. [Forms]personnalisation de couleur d'une form
    Par poula dans le forum Oracle
    Réponses: 5
    Dernier message: 13/01/2007, 20h07
  3. Binarisation d'image pour détection de formes
    Par babarpapa dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 09/05/2006, 15h32
  4. détection de changement brusque des couleurs
    Par zidenne dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/02/2006, 21h26
  5. [Forms] changer les couleurs
    Par Nounoursonne dans le forum Forms
    Réponses: 11
    Dernier message: 02/04/2004, 09h40

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