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 :

[OpenCV 2.1] Créer un flux vidéo


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut [OpenCV 2.1] Créer un flux vidéo
    Bonsoir,

    J'utilise OpenCV 2.1 sous Windows 7. Je souhaite créer un flux vidéo identique à celui en entrée. Pour cela, je fais :
    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
     
    // ouverture du flux vidéo à partir du fichier test.avi
    capture = cvCaptureFromFile("test.avi");
     
    // créer d'un video writer
     CvVideoWriter* writer
         = cvCreateVideoWriter("res.avi",
            //CV_FOURCC('P','I','M','1'),
            //CV_FOURCC('M','J','P','G'),
            cvGetCaptureProperty(capture, CV_CAP_PROP_FOURCC),
            cvGetCaptureProperty(capture, CV_CAP_PROP_FPS),
            cvSize(w, h)
            );
     
    // get a frame
    image = cvQueryFrame(capture);
     
    // write a frame
    cvWriteFrame(writer, image );
    Le problème est que le programme plante sur la dernière ligne. Après investigation, il s'agit d'un problème de codec car la fonction cvGetCaptureProperty(capture, CV_CAP_PROP_FOURCC) semble retourner 0.0
    De même en passant CV_FOURCC('P','I','M','1') ou CV_FOURCC('M','J','P','G'), le programme plante sur la même ligne.
    En mettant -1 à ce paramètre, cela marche et j'ai une fenêtre qui s'ouvre me demandant de choisir le codec à utiliser mais quelque soit mon choix, la vidéo en sortie est beaucoup plus grosse que celle en entrée.

    Je voudrais juste "dupliquer" une vidéo passée en entrée. (bien sur à termes, il y aura des traitements intermédiaires)

    Il faut savoir que j'ai un warning :
    Compiler did not align stack variables. Libavcodec has been miscompiled
    and may be very slow or crash. This is not a bug in libavcodec,
    but in the compiler. You may try recompiling using gcc >= 4.2.
    Do not report crashes to FFmpeg developers.
    Apparemment ce n'est pas grave... mais peut être que le problème vient de là mais aucune solution a été trouvé pour virer ce message à part utiliser Linux pour recompiler la lib !

    Merci et bonne soirée
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  2. #2
    Membre averti

    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Par défaut et bien essai de voir ton problème avec les boucles
    une vidéo est une succession d'images cadencée à une certaine fréquence (pas important pour l'instant vu que tu en a tenu compte),
    donc je te propose un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     while((frame = cvQueryFrame(capture)) != NULL)
                    {
                            cvWriteFrame( writer, frame );
                    }
       //Libération des resources                                                                                                               
            cvReleaseVideoWriter(&writer);
            cvReleaseImage( &frame );
            return(0);
    en tenant compte du fait que ton writer est bien fait

  3. #3
    Membre chevronné
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Par défaut
    bonjour

    Es tu sur du prototype de cvCreateVideoWriter ?

    Dans la doc je lis : CvVideoWriter* cvCreateVideoWriter(const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1)

    (elle n'est peut être pas à jour d'ou ma question, mais ça pourrait expliquer ton problème)

    à l'utilisation ça donnerait plutot donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CvVideoWriter *writer = 0;
    int isColor = 1;
    int fps     = 25;  // or 30
    int frameW  = 640; // 744 for firewire cameras
    int frameH  = 480; // 480 for firewire cameras
    writer=cvCreateVideoWriter("out.avi",CV_FOURCC('P','I','M','1'),
                               fps,cvSize(frameW,frameH),isColor);
    Ou dans ton cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // ouverture du flux vidéo à partir du fichier test.avi
    capture = cvCaptureFromFile("test.avi");
     
    // créer d'un video writer
     CvVideoWriter* writer
         = cvCreateVideoWriter("res.avi",
            CV_FOURCC('P','I','M','1'),
            //CV_FOURCC('M','J','P','G'),
            cvGetCaptureProperty(capture, CV_CAP_PROP_FPS),
            cvSize(w, h),
            1 /* ou 0 si ta vidéo est grise */
            );

Discussions similaires

  1. Créer un Flux Vidéo
    Par willX66eX dans le forum Android
    Réponses: 0
    Dernier message: 05/11/2013, 09h51
  2. Réponses: 1
    Dernier message: 02/04/2012, 13h23
  3. Réponses: 0
    Dernier message: 23/04/2010, 15h21
  4. Intégration d'un flux vidéo OpenCV dans GTK+
    Par kurapix dans le forum OpenCV
    Réponses: 2
    Dernier message: 19/10/2008, 15h31
  5. récupérer un flux vidéo sous openCv
    Par jad777 dans le forum Visual C++
    Réponses: 0
    Dernier message: 05/09/2008, 14h46

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