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

PyQt Python Discussion :

Quel objet choisir?


Sujet :

PyQt Python

  1. #1
    Invité
    Invité(e)
    Par défaut Quel objet choisir?
    Bonjour,
    j'utilise OpenCV pour faire du traitement vidéo/photo.
    J'aimerais intégrer le flux d'image/vidéo d'opencv dans une interface en PyQt5.

    avec PyQtgraph, l'utilisation de imageview apparait compatible mais je trouve que cet objet n'est pas pratique (difficile d'enlever l'histogramme, et les outils par défaut intégrés à imageview ainsi que la doc me paraissent assez limités...).

    QvideoWidget marche bien pour récupérer des flux vidéo (et il les affiche correctement) mais il semble que ce ne soit pas possible de le faire fonctionner avec opencv.


    est-ce qu'il existe des objets dans lesquels il est possible de faire passer des images voire des flux vidéos de manière rapide?

    merci,
    cordialement,

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Normalement tu ne devrais pas avoir de problème pour afficher une vidéo avec Qt sous forme de stream provenant d'OpenCV.

    Tu as un exemple côté OpenCV ? Je veux bien tester.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    oui, ci dessous un exemple qui marche avec un flux vidéo géré par opencv et affiché par pyqtgraph via imageview...

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    from PyQt5.QtWidgets import QGraphicsScene,QMainWindow,QFileDialog,QMessageBox,QApplication,QActionGroup,QAction,QWidget,QGraphicsView,QLineEdit,QCheckBox,QComboBox,QPushButton,QLabel,QSlider,QVBoxLayout,QHBoxLayout,QGroupBox,QRadioButton,QGridLayout
    from PyQt5.QtCore import Qt,QByteArray,QBuffer,QIODevice,QCoreApplication,QSize
    from PyQt5.QtGui import QPen,QFont,QColor,QIcon,QPixmap,QBrush,QPainter,QPixmap
    from PyQt5.QtMultimedia import QCamera,QCameraImageCapture
    from PyQt5.QtMultimediaWidgets import QVideoWidget
    from datetime import datetime
    #from PIL import ImageEnhance,Image,ImageFilter
    #from PIL.ImageQt import ImageQt
    from io import BytesIO
    import os,sys,time,os.path
    from os.path import expanduser
    from numpy import sqrt
    import cv2
    import argparse
    from pyqtgraph import ImageView
     
     
    class fenPrincipale(QMainWindow):
        def __init__(self):
            QMainWindow.__init__(self)
     
            fenetre_widget = QWidget()
            fenetre_widget.setStyleSheet("background-image: url(espace-lumiere-bleue.jpg)")
     
            self.camera=cv2.VideoCapture(0)
            self.image_view = ImageView()
     
            #Boutons
            self.bouton_play = QPushButton("Lancer")
            self.bouton_play.setIconSize(QSize(70,70))
            self.bouton_play.setFixedWidth(70)
     
            #Intégration   
            layoutverticalglobal=QVBoxLayout()
            layouthorizontal1 = QHBoxLayout()
            layoutverticalglobal.addLayout(layouthorizontal1)
            layouthorizontal1.addWidget(self.image_view)
            layouthorizontal1.addWidget(self.bouton_play)         
            fenetre_widget.setLayout(layoutverticalglobal)        
            self.setCentralWidget(fenetre_widget)
     
            #Fonctions Connect
            self.bouton_play.clicked.connect(self.play)
     
            self.showMaximized()
     
        def play(self):
            while True:
                ret, self.last_frame = self.camera.read()
                self.image_view.setImage(self.last_frame.T)
     
                if cv2.waitKey(1) & 0xFF == ord('q'):
                    self.camera.release()
                    break
     
    def main(args):
        appli=QApplication(args)
        fenetre=fenPrincipale()
        fenetre.show()
        r=appli.exec_()
        return r
     
    if __name__=="__main__":
        main(sys.argv)

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Tu peux remplacer ton ImageView par un QLabel et convertir les frames en QImages

    Dans le genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        rgb = cv2.cvtColor(self.last_frame, cv2.COLOR_BGR2RGB)
        qimage = QImage(rgb.data, rgb.shape[1], rgb.shape[0], QImage.Format_RGB888)
        pix = QPixmap.fromImage(qimage.scaled(640, 480, Qt.KeepAspectRatio))
        self.monLabel.setPixmap(pix)
    Pas testé, plus de caméra sous la main ...

  5. #5
    Invité
    Invité(e)
    Par défaut
    et bien les 4 lignes fonctionnent!
    finalement un simple label suffit... je tourne avec une petite config à 30fps! j'arrive pas à aller plus vite.

    Les temps de conversions entre les np.array=>QImage=>Pixmap apparaissent assez faibles finalement

    merci pour le coup de pouce :-)

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/03/2011, 11h49
  2. Quel objet choisir ?
    Par supertoms dans le forum IHM
    Réponses: 9
    Dernier message: 16/04/2008, 10h53
  3. [Débutant] Quel objet dialogue choisir ???
    Par Walm dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/01/2004, 14h40
  4. je veux apprendre la programmation quel language choisir??
    Par existance dans le forum Débuter
    Réponses: 26
    Dernier message: 06/08/2002, 05h32

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