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 :

Capturer le flux vidéo d'une caméra


Sujet :

OpenCV

  1. #1
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut Capturer le flux vidéo d'une caméra
    Re,

    les problemes avec OpenCV s'accumule ! mais on va y arriver!

    voila maintenant je cherche a recupérer le flux video d'une camera sans fil! pour vous donner le contexte j'ai un recepteur qui capte le signal de la camera et qui le transmet a une carte d'acquisition qui est relié au PC(sous Win XP) par l'USB.

    Donc j'ai un code qui tente de récupérer le flux video mais seulement il ne trouve pas ce flux , voici le code(ce code effectue un p'tit traitement egalement):

    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
    #include <cv.h>
    #include <cvaux.h>
    #include <highgui.h>
    #include <stdio.h>
     
    void on_mouse(int event, int x, int y, int flags, void *param)
    {
    	switch(event)
    	{
    		case CV_EVENT_LBUTTONDOWN: printf("MouseLeftButtonDown x= %d y= %d\n",x,y);break;
    		case CV_EVENT_RBUTTONDOWN: printf("MouseRightButtonDown x= %d y= %d\n",x,y);break;
    	}
    }
     
    int main()
    {
    	CvCapture* capture=cvCaptureFromCAM(0);
     
    	cvNamedWindow("Capture Webcam", CV_WINDOW_AUTOSIZE);
    	cvNamedWindow("Lissage Gaussien", CV_WINDOW_AUTOSIZE);
    	cvSetMouseCallback("Capture Webcam",on_mouse,0);
     
    	if(capture)
    	{
     
    		IplImage* frame=cvQueryFrame(capture);
    		int width = (int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH );
    		int height= (int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT);
    		IplImage* gray     = cvCreateImage(cvSize(width,height), IPL_DEPTH_8U ,1);
    		IplImage* gaussian = cvCreateImage(cvSize(width,height), IPL_DEPTH_8U ,1);
     
    		printf("PRESS SPACE TO QUIT \n\n");
     
    		while(1) 
    		{
    			frame = cvQueryFrame(capture);
    			cvShowImage("Capture Webcam",frame);
    			cvConvertImage(frame,gray,1);
    			cvSmooth(gray,gaussian,CV_GAUSSIAN,5,5);
    			cvShowImage("Lissage Gaussien",gaussian);
    			if(cvWaitKey(1)==' ')break;
    		}
    	}
    	else printf("Video stream not found\n\n");
    	cvWaitKey(0);
    	return 0;
    }

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  2. #2
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    Devant le nombre de visite je suppose que mon probleme n'interpelle pas ou pire est insovlable !

    alors je voulais juste une confirmation pour pouvoir continuer mes recherches :
    avec OpenCV sous win XP avec une camera branché en USB aucun driver spécifique est nécessaire a openCV pour capturer le flux video, n'est ce pas?

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  3. #3
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    tu es la première personne que j'entend parler d'opencv
    tu pourrais donner un lien vers le site parlant de cette ... api ?

    sinon pour chercher une piste concernant ton problème, j'imagine que tu définis le flux à récupérer avec la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CvCapture* capture=cvCaptureFromCAM(0);
    si c'est bien ça, le paramètre 0 est-il correct ?
    moi ça me parait bizarre
    quel paramètre t'es demandé et pourquoi 0 ?
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  4. #4
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    OpenCV je le decouvre et ca me parait vraiment interressant ,assez simple et plutot puissant !

    pour te guider je te propose ce lien ou il y a un lien vers le site officiel d'intel et un lien vers une ecole qui a fiat un pdf qui permet de presenter rapidement openCV! :

    http://www.irit.fr/~Gael.Jaffre/LOGICIELS/OPENCV/opencv.html


    ensuite pour le telecharger il est sous sourceforge :

    http://sourceforge.net/projects/opencvlibrary/

    pour l'installer sur ton compilateur (moi j'utilise DevC++) j'ai un bon lien :

    http://www.cypax.net/tutorials/opencv/index?language=en



    voila pour ca !

    sinon le parametre '0' est correct je pense, j'ai d'ailleurs testé avec '-1' qui, au dire de mes lectures, fonctionne tout le temps si on n'a qu'une seul camera branché sur le pc(openCV peut gerer plusieurs cam aparement)! j'ai testé de -1 à 9 et j'ai remarqué qu'avec certaines valeurs avant de m'afficher la fenetre une autre fenetre me demande la source video avec dans la liste ma camera, ca me laisse penser que openCV peut fonctionner avec ma camera ,non?

    Apres je suis tombé sur un site listant et proposant les cameras qui fonctionnent avec OpenCV et leurs drivers, cependant j'ai lu aussi que sous XP avec une cam USB openCV devrait fonctionner! mais chez moi je ne sais pas pourquoi ca ne fonctionne pas! et j'ai beua chercher partout(vraiment partout ) aucune reponse a mon probleme !

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  5. #5
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    Je continue a filer les infos...

    j'ai testé mes algos(j'en ai fait plusieurs, differentes facons de recuperer le flux) avec une webcam "classique" (Logitech) et cela fonctionne au poil! je commence a me demander pourquoi ma camera ne fonctionne pas! est ce que cela vient de la carte d'acquisition du format(PAL),... ?

    si des gens suivent ce post et ont des idées...

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    Salut

    J'ai déja réalisé des projets avec openCV durant mes études, je peux t'aider un peu.

    Plusieurs choses :
    1 - il faut que tu installes les drivers de ta webcam pour utiliser opencv, car il les trouvent automatiquement, sans avoir à configurer quelque chose dans ton code.

    2 - le parametre 0 de la fonction cvCaptureFromCAM correspond à l'index de la webcam branché à ton ordinateur : cette fonction récupère donc le flux vidéo de la 1ere webcam (ce paramètre est indexé à partir de 0)

    3 - ton code concernant la gestion de la capture me semble correct (enfin à 1ere vue), je soupconne les fonctions de traitement d'etre mal utilisées.

    4 - la méthode de capture n'est pas la plus performante (cvCaptureFromCAM + cvQueryFrame). Je te conseille d'utiliser plutot les fonctions cvcam (fichier header cvcam.h). Elles sont beaucoup plus performantes et les frames sont récuperées grace à une fonction callback appelée à une fréquence (configurable) égale à celle de ta webcam (30fps ou 60 fps si ta webcam le permet).
    A l'époque sur mon portable cadencé à 1Ghz, j'avais 7-8 fps avec cvCaptureFromCAM contre 30 fps avec cvcam.

    Je reposterai un source minimal pour l'affichage du flux video avec cvcam plus tard dans la soirée.

    Bon courage
    a+
    Pascal

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    OK, j'avais lu ton dernier post en diagonale, j'ai pas vu que ton code marchait avec une webcam classique Excuse si j'ai douté de tes fonctions de traitements...

    mais est-ce que tu as installé les drivers de cette fameuse webcam sans fil ?
    De souvenir, opencv détecte automatiquement les drivers de ta webcam (c'est en tout cas vrai pour openCV 4.0)

  8. #8
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    ok merci pour tes reponses !

    bon j'ai pas mal de nouveau depuis! alors j'ai reussi a faire fonctionner ma camera sans fil avec cvcam par contre le code donné en exemple avec cvcam utilise le fameux callback mais j'ai une erreur de compil
    * invalid conversion from `void (*)(IplImage*)' to `void*'
    * initializing argument 3 of `int cvcamSetProperty(int, const char*, void*)'
    ces 2 erreurs sont marqués a la ligne en gras dans le code ci dessous! pour passer ce probleme j'ai remplacer le parametre callback par 0 et cela fonctionne , l'affichage marche! cependant sans cette fonction callback je ne sais pas comment recupérer les trames iplImage... une idée?
    merci

    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
    void callback(IplImage* image)
    {
    
    }
    
    //#if 1
    int ShowCamVideo(HWND hwnd, int width, int height)
    {
        VidFormat vidFmt={ width, height, 30.0};
    
        int ncams = cvcamGetCamerasCount( );
        cvcamSetProperty(0, CVCAM_PROP_ENABLE, CVCAMTRUE);
        cvcamSetProperty(0, CVCAM_PROP_CALLBACK,callback);
        cvcamSetProperty(0, CVCAM_PROP_WINDOW, &hwnd);   
    
        //Set Video Format Property
        cvcamSetProperty( 0, CVCAM_PROP_SETFORMAT, &vidFmt);
    
        if( !cvcamInit() )
            return 0;
        cvcamStart();
        return 1;
    }
    
    int main( int argc, char** argv )
    {
        cvNamedWindow("cvcam window", CV_WINDOW_AUTOSIZE);
        if( ShowCamVideo((HWND)cvGetWindowHandle("cvcam window"), 640, 480) )
        {
            cvWaitKey(0);
            cvcamStop();
        }
        cvcamExit();
    }

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    salut

    Tu ne peux effectivement pas récupérer la frame sans l'appel de la callback.
    OpenCV est une api portable, donc ca m'etonnerais que cvcam ne compile pas sous devc++ (ca compile sans probleme sous visual c++ et borland c++)

    c'est juste une petite erreur classiquede passage en argument, il faut peut etre rajouter un "&" (tu récupères ainsi l'adresse de ta fonction callback) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cvcamSetProperty(0, CVCAM_PROP_CALLBACK, &callback);

  10. #10
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    j'ai deja essayé mais ca ne fonctionne pas!

    j'ai lu plein plein de truc la dessus mais je semble etre le seul a avoir ce probleme

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  11. #11
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    apres quantité de pages lus sur des forums anglophones j'ai enfin trouvé la solution a mon probleme et comme d'hab c'est une "connerie" en fait devant le 3eme parametre , a savoir callback, ce n'etait pas "&" qu'il fallait ajouter mais (void * )!

    voila c'est bon ! au travail

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut question un peu stipide mais bon....
    Bonjour
    je voudrais recuperer ma video pour faire du traitement mais je ne voit pas pas concretement comment s'appel le flux que j'affiche dans le bout de code precedent.
    Merci

  13. #13
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    tu peux préciser... tu n'arrives pas a determiner le nom de la variable qui contient les données videos? si c'est ca les données vidéos sont en fait des IplImages(des images si tu veux) donc dans ton code tu as bien du déclarer des IplImages , non? dans mon exemple(1er post) frame contient les images...

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

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

Discussions similaires

  1. Capture du flux vidéo d'une carte graphique
    Par SyphaxIlies dans le forum OpenCV
    Réponses: 0
    Dernier message: 10/04/2012, 23h57
  2. Enregistrer le flux vidéo d'une caméra Axis
    Par nesrine18 dans le forum Multimédia
    Réponses: 2
    Dernier message: 09/03/2012, 11h05
  3. Comment récupérer le flux vidéo d'une caméra IP ?
    Par MaTHieU_ dans le forum Débuter
    Réponses: 3
    Dernier message: 14/10/2011, 16h06
  4. Capture du flux vidéo d'une webcam
    Par nightwar dans le forum OpenCV
    Réponses: 1
    Dernier message: 16/12/2009, 13h31
  5. [C#]visualiser le flux vidéo d'une caméra Axis
    Par nokta dans le forum Windows Forms
    Réponses: 6
    Dernier message: 21/11/2005, 19h07

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