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

Discussion :

Lire une vidéo dans Qt

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Points : 25
    Points
    25
    Par défaut Lire une vidéo dans Qt
    Bonjour,

    Je developpe sous Eclipse C++, avec QT (QT integration ) et OpenCV.

    Je cherche à me faire une fenetre avec trois boutons : Play, Pause et Quitter ainsi qu'une zone ou je vais diffuser une vidéo.

    1- Dejà, je fais mon interface avec QT Designer et je n'arrive pas à rajouter un QDialog pour sélectionner un fichier.

    2- Je ne trouve pas comment faire ou que la zone diffuse la vidéo. Pour le moment, je ne cherche même pas à faire play/pause... je veux juste la lire dans la fenetre.

    Etant débutant, je suis en grande difficulté.

    D'avance je remercie tout ce qui vont essayer de m'aider.

  2. #2
    Membre averti Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Points : 344
    Points
    344
    Par défaut
    Bonjour à toi,

    il y a un truc à droite pour rechercher dans le forum, en tapant "opencv" il trouve plein de topics dont un "Résolu" pour intégrer opencv, pour afficher dans une fenêtre de la video ....

    lien dans ce même forum

    Ensuite, pour ton problème de sélection de fichier, jette un coup d'oeil là :

    documentation de QFileDialog

    The QFileDialog class provides a dialog that allow users to select files or directories.

    The QFileDialog class enables a user to traverse the file system in order to select one or many files or a directory.

    The easiest way to create a QFileDialog is to use the static functions. On Windows, these static functions will call the native Windows file dialog, and on Mac OS X these static function will call the native Mac OS X file dialog.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    Lire une vidéo avec OpenCV, j'y suis arrivé. Mais dans une fenetre externe.

    Là je veux lire une vidéo dans une interface QT MainWindow, et là, je bloque.

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Salut à toi,

    Je pense pouvoir t'aider !

    D'abord, Qt n'est pas QT, surtout quand on parle de vidéo (QT étant QuickTime). La casse a donc son importance.

    Alors, d'abord, le plus simple, tu vas dans ton dossier Qt/bin et tu lances qtdemo.exe. Ensuite tu vas Phonon/Music Player et tu fais launch :

    Normalement, ca devrait un peu près ressembler à ce que tu as envie de faire, sauf qu'a la place de la playlist, tu veux ta vidéo. Si c'est le cas, tu ouvres la documentation (toujours dans qtdemo.exe) et tu analyses le code :

    En gros, tout ce qui concerne Phonon / Media Object, tu laisses tomber. En dehors de ça, tu devrais un peu près retrouver comment faire une fenêtre, trois boutons avec des icones, et comment ouvrir une boite de dialogue pour ouvrir un fichier.

    Quand tu auras fait une petite interface qui ressemble à ce que tu veux, on s'attaquera à la vidéo et OpenCv.

    Bien sûr, nous sommes là pour t'aider, mais entre la FAQ, le forum, la doc Qt et l'exemple cité plus haut, tu as largement les ressources suffisantes.

    Bonne chance,

    G.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    Impossible de "launch" phonon depuis qtdemo.exe. D'ailleurs c'est bien le seul qui ne se lance pas.
    J'ai regardé la documentation fournie de phonon et je ne suis pas sûr que ce soit approprié.

    Que pour faire la lecture d'une vidéo, je faisais :

    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
        IplImage* img;
        CvCapture* capture = cvCreateFileCapture("C:\\essai.avi");
     
        if( !capture ) return 10;
     
        cvNamedWindow("video", CV_WINDOW_AUTOSIZE);
        char key = ' ';
     
        if(!cvGrabFrame( capture )) return 20;
     
        double framerate;
        framerate = cvGetCaptureProperty( capture, CV_CAP_PROP_FPS );
     
        while(key != 'q') {
            img = cvRetrieveFrame( capture );
            cvShowImage( "video", img );
            key = cvWaitKey( (int) framerate );
            if(!cvGrabFrame( capture ))
                key = 'q';  
        }
     
        // Destruction of windows and capture, image mustn't have be destroyed
        cvDestroyAllWindows();
        img = NULL;
        cvReleaseCapture( &capture );
    Je veux faire la meme chose dans une petite fenetre dans une MainWindow.
    Je ne sais pas quoi mettre comme petite fenetre dans ma MainWindow et encore moins comment lire la vidéo.
    Mais l'idée est qu'après mes traitements se feront image par image donc il me faudra acceder aux images...

    Je ne sais pas si je suis très clair...

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    D'ailleurs c'est bon pour la boite de dialogue pour charger un fichier, les menus, la statusbar... etc

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Justement, je te disais de NE PAS faire attention à Phonon, nous n'allons pas l'utiliser. C'est juste que l'interface présentée dans l'exemple utilisant Phonon, juste l'interface, devait correspondre au GENRE de chose que tu voulais faire.
    C'était pour te donner un exemple de code qui permettait de faire une fenêtre avec 4 boutons.

    Pour la lecture, c'est pas très compliqué. Tu gardes les méthodes d'openCV !

    Je te prépare un bout de code qui te permettra de mettre une IplImage dans un QWidget.

    G.

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    voici à peu près une classe permettant d'afficher une QImage dans un widget :
    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
    class VideoWin : public QWidget
    {
    public:
    	VideoWin ( QWidget * parent = 0, Qt::WindowFlags f = 0 ) : QWidget  (parent,f){};
     
    	void setImage(QImage newImage)
    	{
    	currentImage=newImage;
    	this->repaint();
    	}
     
    	void paintEvent ( QPaintEvent * event )
    	{
    	QPainter painter(this);
    	painter.drawImage(QPoint(0,0),currentImage);
    	}
     
    	QImage currentImage;
    };
    Voici une méthode pour convertir une IplImage* en QImage :
    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
    QImage IplToQImage(const IplImage *newImage)
    {
    	QImage qtemp;
    	if(newImage && newImage->width>0)//image valide
    	{
    		int x;
    		int y;
    		char* data = newImage->imageData;
    		qtemp = QImage(newImage->width, newImage->height,QImage::Format_RGB32);//on cree l'architecture de la QImage
     
    		for( y = 0; y < newImage->height; y++, data +=newImage->widthStep )
    			for( x = 0; x < newImage->width; x++)
    			{
    				uint *p = (uint*)qtemp.scanLine(newImage->height-y-1) +x;//le scanline est a adapter, selon l'originie de l'IplImage
    				*p = qRgb(data[x * newImage->nChannels+2],//on "copie" la valeur du pixel, alpha est par défaut opaque
    						data[x * newImage->nChannels+1],
    						data[x * newImage->nChannels]);
    			}
    	}
    	return qtemp;
    }
    Et voilà un bout de code pour convertir un QString( path windows) en char*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    QString fileName= QFileDialog::getOpenFileNames(------)//dialog d'ouverture
    if(!fileName.contains(.avi))
    return;
    fileName=fileName.replace("\\","/");//on remplace les \ windows par des /
    qDebug()<<fileName;
    QByteArray qtab = fileName.toAscii();
    char buffer[200];
    for(int i=0;i<200;i++)
        buffer[i]=qtab.at(i);
    capture = cvCaptureFromAVI(buffer);
    T'as plus qu' à intégrer ça dans l'interface que tu voulais !

    Bonne chance,

    G.

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/06/2009, 12h51
  2. Lire une vidéo dans un pictureBox c++ .Net
    Par bonofred dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 16/09/2008, 15h10
  3. [VCL.NET] Lire une vidéo dans une application
    Par Hermite dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 09/05/2008, 22h13
  4. lire une vidéo dans un composant window
    Par dado225 dans le forum Flash
    Réponses: 2
    Dernier message: 01/09/2006, 09h33
  5. lire une vidéo dans une interface Perl/Tk
    Par François31 dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 25/08/2006, 15h52

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