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 :

Faire une photo avec OpenCV et GTK


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 79
    Par défaut Faire une photo avec OpenCV et GTK
    Bonjour
    j'ai un petit problème , j'ai une interface très rapidement conçue avec GTK qui est constituée d'une fenêtre et d'un bouton. Lorsque j'appuie sur ce bouton la caméra se lance via opencv!
    au bout d'un certain temps elle doit faire une photo de ce qu'elle voit et l'afficher.
    Probleme : elle n'affiche rien, elle se lance, au bout de quelques boucles elle fait une photo vide


    voici mon code

    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
    void
    on_capture2_toggled                    (GtkToggleButton *togglebutton,
                                            gpointer         user_data)
    {
     
        /* Déclaration des variables */
        double count = -30;
        CvCapture *capture1 = 0;
        IplImage *img_temp = cvCreateImage(cvSize(640,480), IPL_DEPTH_32F  ,3);
     
     
        /* Démarrage de la Caméra */
        int cameras = cvcamGetCamerasCount();
        VidFormat vidFmt={ 640, 480, 30.0};
        cvcamSetProperty(0, CVCAM_PROP_ENABLE     , CVCAMTRUE);
        cvcamSetProperty(0, CVCAM_PROP_SETFORMAT  , &vidFmt);
        cvcamInit();
        cvcamStart();
        capture1 = cvCaptureFromCAM(1);
     
     
        for(;;)
        {
            img_temp = cvQueryFrame(capture1);
            count++;
            if (count == -1)
            {
                img_temp = cvQueryFrame(capture1);
                break;
            }
        }
        cvNamedWindow("test",CV_WINDOW_AUTOSIZE);
        cvShowImage("test",img_temp);

    merci d'avance ^^

    si je lui demande d'afficher l'image il y a un carré gris et si je lui demande d'enregistrer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cvSaveImage("tes.bmp", img_temp);
    il me dit que img_temp est NULL

  2. #2
    Membre expérimenté Avatar de Vinsss84
    Profil pro
    Inscrit en
    Février 2008
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2008
    Messages : 175
    Par défaut
    Bonjour,
    Déja petite confusions, tu fais un mix dans ton programme de l'utilisation de la cvcam et de highgui :

    int cameras = cvcamGetCamerasCount();
    VidFormat vidFmt={ 640, 480, 30.0};
    cvcamSetProperty(0, CVCAM_PROP_ENABLE , CVCAMTRUE);
    cvcamSetProperty(0, CVCAM_PROP_SETFORMAT , &vidFmt);
    cvcamInit();
    cvcamStart();
    Utilise des fonctions de cvcam necessitant un callback derriere
    Alors que :
    capture1 = cvCaptureFromCAM(1);


    for(;
    {
    img_temp = cvQueryFrame(capture1);
    count++;
    if (count == -1)
    {
    img_temp = cvQueryFrame(capture1);
    break;
    }
    }
    Utilise des fonctions de highgui


    Bon déja je te conseillerai d'ajouter un test du type :

    CvCapture *capture=cvCaptureFromCAM(-1);
    if (!capture) printf(" > INFO : Camera error\n");

    pour voir si le flux vidéo est bel et bien ouvert.
    Prefere le -1 en indice du cvCaptureFromCam de façon à laisser la librairie chosiir elle même le domaine dans lequel ta camera se trouve

    Voila sinon ça devrait marcher.
    Personnelement je préfere utiliser

    cvGrabFrame(captureL);
    ImageL = cvRetrieveFrame(captureL);

    à la place de QueryFrame ; question de choix

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 79
    Par défaut
    Citation Envoyé par Vinsss84 Voir le message
    Bonjour,
    Déja petite confusions, tu fais un mix dans ton programme de l'utilisation de la cvcam et de highgui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int cameras = cvcamGetCamerasCount();
    VidFormat vidFmt={ 640, 480, 30.0};
    cvcamSetProperty(0, CVCAM_PROP_ENABLE , CVCAMTRUE);
    cvcamSetProperty(0, CVCAM_PROP_SETFORMAT , &vidFmt);
    cvcamInit();
    cvcamStart();
    Utilise des fonctions de cvcam necessitant un callback derriere
    Alors que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    capture1 = cvCaptureFromCAM(1);
     
     
    for(;;)
    {
         img_temp = cvQueryFrame(capture1);
         count++;
         if (count == -1)
         {
              img_temp = cvQueryFrame(capture1);
              break;
         }
    }
    Utilise des fonctions de highgui


    Bon déja je te conseillerai d'ajouter un test du type :

    CvCapture *capture=cvCaptureFromCAM(-1);
    if (!capture) printf(" > INFO : Camera error\n");

    pour voir si le flux vidéo est bel et bien ouvert.
    Prefere le -1 en indice du cvCaptureFromCam de façon à laisser la librairie chosiir elle même le domaine dans lequel ta camera se trouve

    Voila sinon ça devrait marcher.
    Personnelement je préfere utiliser

    cvGrabFrame(captureL);
    ImageL = cvRetrieveFrame(captureL);

    à la place de QueryFrame ; question de choix
    Avec le test, le message d'erreur est renvoyé donc le flux n'est pas ouvert ?
    en fait la caméra se lance, je me vois bouger, mais au bout d'un certain temps elle devrait faire un screen et non...

    Sinon je ne vois pas comment faire sur l'histoire du mix entre highgui et cvcam.
    J'ai besoin de l'initialiser, puis de prendre un screen et je ne sais pas comment faire autrement.

    si je luis mets (-1); cvCaptureFromCAM(-1) et bien il me demande a chaque fois de choisir ma caméra k alors que j'en ai qu'une de branché, en mettant 1 , il ne me le demande pas. Est-ce tout de même une erreur?

  4. #4
    Membre expérimenté Avatar de Vinsss84
    Profil pro
    Inscrit en
    Février 2008
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2008
    Messages : 175
    Par défaut
    Disons que l'utilisation des fonction de cvcam est obselete : l'initialisation est realisée lorsque tu lances ta fonction cvCaptureFromCAM(-1)

    Tu utilises quoi pour visualiser l'image? Tu veux prendre la photo à l'appuie sur le bouton du gtk c'est ça? Ou juste au bout d'un certain timing.
    Tu as placé un cvSaveImage quelque part?

    Si le message d'erreur s'affiche il y a un petit soucis en effet. Si tu peux detailler un peu plus ton code que je comprenne mieux l'architechture du programme

    edit, ok je susi revenu au premier message. En gros tu veux sauvegarder la 30eme image; je t'avoue que le -1 m'avait un peu traumatisé, en général je compte en partant de Zero
    Essaye de place le cvSaveImage avant de faire le break et de sortir de la boucle.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 79
    Par défaut
    Alors en fait j'ai une fenêtre qui contient un bouton en GTK.
    je compile
    lorsque je lance l'exe. la fenêtre se lance, lorsque j'appuie sur le bouton, la caméra se met en marche ( ça c'est ok , je me vois), et au bout de 3 secondes (par exemple) une photo est faite (automatiquement) puis affichée à l'écran dans une fenêtre opecv (cvImageShow)
    je n'arrive pas à comprendre pourquoi je me vois et pourquoi la photo est vide.

    voici le code actuel :
    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
    void on_capture_clicked (GtkButton *button, gpointer user_data)
    {
        /* Déclaration des variables */
        int count = 0;
        CvCapture *capture1;
        IplImage *img_temp = cvCreateImage(cvSize(640,480), 32  ,3);
     
     
        /* Démarrage de la Caméra */
        int cameras = cvcamGetCamerasCount();
        VidFormat vidFmt={ 640, 480, 30.0};
        cvcamSetProperty(0, CVCAM_PROP_ENABLE     , CVCAMTRUE);
        cvcamSetProperty(0, CVCAM_PROP_SETFORMAT  , &vidFmt);
        cvcamInit();
        cvcamStart();
        capture1 = cvCaptureFromCAM(1);
        if (!capture1) printf(" > INFO : Camera error\n");
     
        for(;;)
        {
            printf("%d\n", count);
            img_temp = cvQueryFrame(capture1);
            count++;
            if (count == 100)
            {
                img_temp = cvQueryFrame(capture1);
                cvNamedWindow("test", CV_WINDOW_AUTOSIZE);
                cvShowImage("test", img_temp);
                break;
            }
        }
    }

    Le bouton qui permet de faire la photo s'appelle capture
    En fait c'est comme un appareil photo, au moment ou je clic j'ai par exemple 10 seconde pour faire "cheese" ^^
    merci de tes réponses


    l'initialisation est faites comme tu le dis mais le problème c'est que je ne peux pas choisir la résolution et les fps avec l'initialisation par défaut, alors c'est pour cela que je le faisais manuellement.

  6. #6
    Membre expérimenté Avatar de Vinsss84
    Profil pro
    Inscrit en
    Février 2008
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2008
    Messages : 175
    Par défaut
    juste une derniere question, tu te vois ou en fait? Je ne vois pas l'endroit ou tu affiches l'image courante de la webcam dans le programme

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

Discussions similaires

  1. Faire fonctionner une caméra avec OpenCV 2.0
    Par Totocariolet dans le forum OpenCV
    Réponses: 10
    Dernier message: 05/05/2010, 15h48
  2. Impossible de faire une galerie avec des photos apparaissant en fondu
    Par daphpassion dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/03/2009, 19h46
  3. cmt se connecté a oracle pour faire une requete avec python
    Par dipajero dans le forum Bibliothèques tierces
    Réponses: 6
    Dernier message: 28/12/2005, 20h22
  4. Faire une JFrame avec LookAndFeel
    Par aburner dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 03/12/2003, 08h54

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