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 :

Afficher une IplImage dans un picture control


Sujet :

OpenCV

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 25
    Points : 19
    Points
    19
    Par défaut Afficher une IplImage dans un picture control
    Salut tt le monde.
    je voudrais savoir si qlq connaitré comment afficher une IplImage dans un picture control au lieu que ca soit utilisant cvShowImage.
    C'est pour créé une interface dans laquelle la video est jouée à l'intérieur de la fenêtre.
    merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Points : 43
    Points
    43
    Par défaut
    Bonjour, j’aurais la même question. Comment afficher la vidéo lue dans un Picture control à la place d’une fenêtre.

    Voici le code que j’ai essayé et qui ne fonctionne pas.
    J’ai essayé de récupérer un nom que donnerait windows à ma picture box avec cvGetWindowName. et avec ctrlLiveVideo qui posséde le hwnd de ma picture.
    Ça ne fait rien de bon.
    Bien sur si je crée une fenêtre exprès ça marche très bien, mais c’est pas le but
    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
     
    CvCapture* capture=cvCaptureFromCAM(CV_CAP_ANY);
    	char * testt;
    	testt=(char *)cvGetWindowName(&m_ctrlLiveVideo);
     
    	if(capture){
      OutputDebugString("OK!!\n" );
     // cvNamedWindow("Capture caméra", CV_WINDOW_AUTOSIZE); 
      writer = cvCreateVideoWriter("c:\\video.avi", CV_FOURCC('X','V','I','D'),24,cvSize(320,280),0); 
     IplImage *im;
         while(cvGrabFrame(capture)) 
           {
           im = cvRetrieveFrame(capture);
     
           /* Traitement de l’image */  
           cvShowImage(testt, im);
           //cvShowImage(cvGetWindowName(&m_ctrlLiveVideo), im);
     
           cvWriteFrame(writer, im);
           if( cvWaitKey( 10 ) >= 0 )
                    break;
           }
    Ou alors, est-il possible d’enregistrer de la video lorsque l’on utilise la cam ainsi :

    La variable vide recepère les dimension de mon picture contrôle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    VidFormat vidFmt={ vide.bottom, vide.right, 24.0};
    	cvcamSetProperty(0, CVCAM_PROP_ENABLE, CVCAMTRUE); 
    	//on va afficher cette video
    	cvcamSetProperty(0, CVCAM_PROP_RENDER, CVCAMTRUE)  ;
    	cvcamSetProperty(0, CVCAM_PROP_CALLBACK,0);
    	cvcamSetProperty(0, CVCAM_PROP_WINDOW, &m_ctrlLiveVideo);   // 
    	cvcamSetProperty(0, CVCAM_RNDHEIGHT, &vide.bottom); 
    	cvcamSetProperty(0, CVCAM_RNDWIDTH, &vide.right); 
    	cvcamSetProperty( 0, CVCAM_PROP_SETFORMAT, &vidFmt);
    	cvcamInit();
    	cvcamStart();
    Donc avec ça, j’affiche dans le Picture box comme je veux, mais je n’ai pas trouvé comment enregistrer.

    J’ai essayé de mixer les deux, mais on ne peut ouvrir deux fois la même camera.

    Donc pour récapituler les questions, comment peut on faire pour afficher la vidéo dans un Picture control suivant la première méthode, ou comment peut on faire pour enregistrer la vidéo suivant la deuxième.



    Didulle si tu as pas besoin d’enregistrer la seconde méthode sera parfaite pour toi.

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    Pour pouvoir enregistrer le flux vidéo, je suis donc passé par ma méthode 1 avec "highgui.h"

    Je transforme l’image du format IplImage, en HBITMAP, pour l’afficher dans un picure box, ca marche sauf que l’image est à l’envers pour le moment…

    J’ai fait un thread pour la lecture vidéo, avec lequel je fait


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if(capture){
     
      while(cvGrabFrame(capture))
      {   
           im = cvRetrieveFrame(capture);
     
    	   ::PostMessage((HWND)this->m_hWnd,WM_PAINT,0,0);// PostMessage
    PumpMessages();
      }     
    }
    Le problème vient du fait que ma picture box ne se rafraichie que lorsque je la couvre par une autre fenêtre.

    Je ne comprend pas pourquoi le postMessage ne fait pas d’effet ?
    C’est peut être un question que je devrais poser ailleurs.


    Et faut il mieux que j’utilise un timer ou un Thread pour ce bout de code ?
    Car si je fais un thread à la place du timer, quand je manipule ma fenêtre mon autre timer s’emballe^^^

    Enfin si quelqu’un a une idée pour rafraichir ma picture box


    merci

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Points : 43
    Points
    43
    Par défaut
    solution


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     this->RedrawWindow(
              r, // handle to window
              NULL, // update rectangle
              RDW_INVALIDATE // handle to update region
              );
    tt est résolu pour moi

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/02/2012, 11h55
  2. Réponses: 0
    Dernier message: 30/11/2009, 09h50
  3. Réponses: 2
    Dernier message: 06/02/2008, 17h13
  4. Afficher une IplImage dans une picturebox
    Par Sixdeux dans le forum C#
    Réponses: 14
    Dernier message: 15/05/2007, 16h43
  5. [MFC]Afficher une image dans un Picture
    Par Cirdan Telemnar dans le forum MFC
    Réponses: 3
    Dernier message: 24/04/2006, 16h40

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