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

Qt Discussion :

Redimensionner une image automatiquement (OpenCV => QT)


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 63
    Par défaut Redimensionner une image automatiquement (OpenCV => QT)
    Hello ! :-)

    Version de QT : 4.6
    OS de programmation : Linux & Mac

    Je travaille sur un programme utilisant OpenCV pour récupérer des images d'un flux vidéo. L'idée est de récupérer les images, les traiter, et les afficher à l'écran. Mon but est d'afficher des images sur un fond noir, un peu comme si on lançait une vidéo en plein écran (fond noir et vidéo aggrandie au maximum ^^)

    1°) J'ai réussi à trouver et adapter un code permettant de passer d'une IplImage à une QImage (si quelqu'un le veut je lui donne :-)).
    2°) J'ai trouvé un bon petit tutorial permettant de façonner sa propre fenêtre. Me permettant ainsi plus tard de faire une fenêtre à fond noir prenant tout l'écran et afficher mon image au milieu.

    En fait je voulais avoir votre avis pour la redimension de l'image et son affichage. Actuellement pour afficher l'image convertie je fais quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this->imageLabel->setPixmap(QPixmap::fromImage(*dataQT));
    Mes questions (qui se complètent ^^)
    1°) Est-ce qu'il y a un meilleur moyen d'afficher une QImage (et est-ce le meilleur format pour ce que je veux faire) ? Ou est-ce déjà un choix "correct" ?
    2°) Y-a-t-il un moyen avec QT de faire une redimension automatique de l'image selon la taille de la fenêtre sans devoir le faire de manière barbare sous OpenCV ?

    Merci à vous :-)
    Bonne semaine !
    Vincent

  2. #2
    Membre émérite

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Salut,

    1)Oui il y a mieux que passer par un label (dont le repaint est trop lourd). Le mieux est de redéfinir le paintEvent d'un QWidget et d'utiliser la méthode QPainter::drawImage().

    Voici une petite classe qui pourrait te servir :
    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(this->pos(),currentImage);
    	}
     
    	QImage currentImage;
    };
    2)Il y a la méthode QImage::scaled(...) qui va bien pour redimensionner ton image à la taille voulue.

    G.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 63
    Par défaut
    Hello,

    Merci pour tes réponses pertinentes :-)
    Je vais regarder ça de plus près tout de suite !

    Sinon en passant ^^
    J'ai créé une fenêtre avec QT dans une autre classe que ma boucle OpenCV (qui récupère les images).
    OpenCV avant récupérait les évènements claviers, mais en créant cette fenêtre avec QT il a prit la main sur les events clavier.

    Est-ce qu'il y a un moyen pour que quand on créé la fenêtre on lui dise de ne pas se soucier des events clavier ^^ ?

    Merci encore :-)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 164
    Par défaut
    si tu n'utilises pas la partie GUI d'OpenCV il ne devrait pas prendre en charge les events claviers

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 63
    Par défaut
    Effectivement pour les events clavier c'est possible... :-) merci !

    J'ai réussi à modifier la taille de la QImage, effectivement la méthode est bien foutue, merci encore !

    Par contre pour afficher la QImage directement dans le paintEvent, bof :-|
    J'avais déjà un peu touché cet aspect avec un autre programme ou je dessinais des formes, donc j'avais plus ou moins le modèle (qui est en gros le même qu'indiqué plus haut ^^). Mais quand j'essaye d'afficher mon image directement dans l'event et non dans le Label ça me fait un Bus Error :-( je comprends vraiment pas -_-

    Voilà ma méthode de paint, sachant que dataQT est une QImage*. J'ai essayé sans le scale avec un *dataQT mais ca fait aussi un busError.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void Screen::paintEvent(QPaintEvent * event) {
     
    	QDesktopWidget desktop;
    	QPainter painter(this);
    	painter.drawPixmap(QPoint(0, 0), QPixmap::fromImage(this->dataQT->scaled(QSize(desktop.width(), desktop.height()), Qt::KeepAspectRatio)));
    	painter.end();
     
    }
    Bref, je capte vraiment rien à cette erreur de *** ^^
    Une idée ou un conseille de debug ? Je suis à court d'idée :-p Bon au pire je la laisse dans le Label, mais c'est moins performant et moins beau ^^ (et en plus y'a des marges/padding qui me font chier ^^)

    Encore merci pour le coup de main :-)
    Vincent

  6. #6
    Membre émérite

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Déjà, tu peux utiliser QPainter::drawImage() au lieu de passer par un QPixmap( tu perds du temps pour rien).

    Sinon, tu peux être un peu plus explicite sur ton "bus error" (je n'ai jamais entendu parler de ça).

    Sinon, tu peux déjà essayer avec une image bidon, venant d'un fichier, pour voir si le problème est lié à OpenCV, ou juste à une mauvaise utilisation (de tes pointeurs) du paintEvent.

    G.

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

Discussions similaires

  1. Redimensionner une image automatiquement lors de l'ajout ?
    Par polux31 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/05/2011, 13h23
  2. Redimensionner une image automatiquement
    Par xycoco dans le forum IHM
    Réponses: 1
    Dernier message: 16/10/2008, 11h04
  3. Redimensionner une image automatiquement
    Par Romuald632 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 16/09/2008, 09h24
  4. [VB.NET] Redimensionner une image proportionnelement
    Par Monster77 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/10/2004, 12h10
  5. [MX2004] redimensionner une image lors du chargement
    Par ouinouin dans le forum Flash
    Réponses: 8
    Dernier message: 18/02/2004, 18h32

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