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

GTK+ avec C & C++ Discussion :

[GTK+] Capture vidéo avec OpenCV et intégration dans une GUI GTK+


Sujet :

GTK+ avec C & C++

  1. #1
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 55
    Points : 73
    Points
    73
    Par défaut [GTK+] Capture vidéo avec OpenCV et intégration dans une GUI GTK+
    Salut les développeurs!!!

    Alors voilà, j'aimerais intégrer une fonction de capture vidéo à partir de la webcam dans une interface GTK+. La capture vidéo se faisant par OpenCV.

    Etant donner qu'un programme GTK+ entre dans une boucle infini, qui ne s'arrête que lorsqu'on quitte le programme, je ne pouvais pas faire une boucle pour la capture vidéo via OpenCV. J'ai donc dû intégrer une fonction ne capturant qu'une seule image qui serait appelée périodiquement pour avoir un flux vidéo. A chaque appel de cette fonction, l'idée serait de sauvegarder l'image puis de l'afficher dans la GUI par le biais de GtkImage.

    Voici mon code :
    - Pour la capture de l'image :
    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
    // Capture video avec openCV
    guint cameraCapture (void)
    {
        // CvCapture* capture = cvCaptureFromCAM(0); // capture from video device #0
        CvCapture* capture = cvCreateCameraCapture(0); // cree une capture
     
        IplImage* img = 0;
        /// Capture avec la webcam
        // Capture d'une image et verification si la capture s'est bien deroulee
        if (!cvGrabFrame(capture))
        {
            printf("Could not grab a frame\n\7");
        }
        else
        {
            // Recuperation de l'image capturer
            img=cvRetrieveFrame(capture);
            // Si l'image a ete capturee correctement, l'afficher avec un delai de x ms
            if (img)
            {
                // Sauvegarde l'image
                cvSaveImage("camera.jpg", img);
            }
     
            cvReleaseCapture(&capture);
            capture = NULL;
        }
     
        return TRUE;
    }
    - Pour l'intégration dans l'interface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_timeout_add(40, (GSourceFunc)cameraCapture, NULL);

    J'appel ma fonction toute les 40 ms donc.
    Le problème est que l'intégration de ma fonction dans la boucle évènementielle de GTK+ fige le GUI et on ne peut plus rien faire ...
    Je n'ai pas coder l'affichage de l'image dans l'interface étant donnée que celle-ci est figée ...
    Ma question est la suivante : Comment faire pour intégrer un flux vidéo venant d'OpenCV dans une interface graphique GTK+?


    J'ai l'idée d'intégrer un boutton d'activant et désactivant cette intégration de la fonction dans la boucle évènementielle. Si j'ai bien lu la documentation de la Glib concernant les boucles évènementielles, je devrais utiliser g_source_remove (); c'est bien ça?

    Je vous remercie d'avance.

    Kurapix

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    L'acquisition de l'image depuis la caméra prend un temps "long" ? C'est à cause de ça que ton interface est figée ?

  3. #3
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 55
    Points : 73
    Points
    73
    Par défaut
    Justement je ne sais pas pourquoi mon interface est figée ... peut-être à la lenteur de l'acquisition vidéo comme vous dites.

    J'ai remarquer que lorsqu'une image n'est pas entière, OpenCV affiche des messages d'erreur en console. Peut-être qu'en les enlevant ça accellererait la chose non? (un printf ça ralentit vachement, j'ai fais des tests)

    Kurapix

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Affiche l'heure au début de ta fonction d'acquisition d'image, l'heure à la fin, ça te donnera une idée du temps que tu as passé pour obtenir l'image. Tu peux aussi utiliser les GTimer pour mesurer le temps écoulé si tu es faignant

  5. #5
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 293
    Points : 4 943
    Points
    4 943
    Billets dans le blog
    5
    Par défaut
    Comme solution je pencherai plutôt dans la création de 2 applications. Une en mode serveur qui se chargerai d'acquérir les images et l'autre qui récupèrerai les images ainsi acquises via un système de "pipe".
    Ainsi l'application GTK+ ne serait pas bloquante.

  6. #6
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 55
    Points : 73
    Points
    73
    Par défaut
    teuf13 merci mais ça je sais le faire, c'est pas ce que je cherche à faire ....

    gerald3d ... t'inscrutes pas : un problème = un sujet.

    Donc je n'ai toujours pas résolu mon problème d'intégration d'une capture vidéo OpenCV dans une interface graphique GTK+.
    Je vais regarder cela un peu plus tard, il faut que je factorise et que j'améliore le code d'un pote pour la reconnaissance de code barre EAN 13.

    Si quelqu'un avait une idée ce serait super bien ^^.
    Je vais essayer d'étudier encore OpenCV (je kiffe pas trop cette bibliothèque mais vu que c'est la seule libre faisant du traitement d'image ...).

    Kurapix

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Citation Envoyé par kurapix Voir le message
    teuf13 merci mais ça je sais le faire, c'est pas ce que je cherche à faire ....
    Tu sais faire quoi ? Mesurer la durée d'acquisition d'une image ?

Discussions similaires

  1. Lecture d'une vidéo avec OpenCV
    Par Auriga1 dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 03/07/2010, 08h37
  2. Réponses: 10
    Dernier message: 10/02/2009, 09h25
  3. Problème d'acquisition d'une image vidéo avec OpenCV
    Par erwangouyette dans le forum C++
    Réponses: 0
    Dernier message: 22/08/2008, 19h28
  4. Réponses: 5
    Dernier message: 06/08/2006, 19h38

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