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 :

QPixmap et QGraphicsPixmapItem


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut QPixmap et QGraphicsPixmapItem
    Bonjour,
    je suis en train de me créer un petit utilitaire de prise de photo via un flux vidéo issu d'une caméra.

    j'utilise un empilage d'objet comme suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    self.videoWidget = QVideoWidget()
    self.videoWidget.setStyleSheet("QVideoWidget{background: black}")
    self.scene=QGraphicsScene()
    self.view =QGraphicsView()
    self.view.setScene(self.scene)
    self.view.setStyleSheet("QGraphicsView{background: transparent}")
    self.scene.addWidget(self.videoWidget)
    self.resox=640
    self.resoy=480
    Ensuite je m'arrange à détecter ma camera via:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    cameraDevice = QByteArray()
    videoDevicesGroup = QActionGroup(self)
    videoDevicesGroup.setExclusive(True)
    for deviceName in QCamera.availableDevices():
        description = QCamera.deviceDescription(deviceName)
        videoDeviceAction = QAction(description, videoDevicesGroup)
        videoDeviceAction.setCheckable(True)
        videoDeviceAction.setData(deviceName)
        if cameraDevice.isEmpty():
            cameraDevice = deviceName
            videoDeviceAction.setChecked(True)
            self.menucameras.addAction(videoDeviceAction)
            videoDevicesGroup.triggered.connect(self.updateCameraDevice)

    Ensuite, je sélectionne la camera avec une fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def setCamera(self, cameraDevice):
            if cameraDevice.isEmpty():
                self.camera = QCamera()
            else:
                self.camera = QCamera(cameraDevice)
                self.camera.setViewfinder(self.videoWidget)

    La prise de photo est gérée par l'ensemble des fonctions ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def takeImage(self):
        self.isCapturingImage = True
        self.imageCapture.capture()
    def readyForCapture(self, ready):
        self.bouton_stop.setEnabled(ready)
    def processCapturedImage(self, requestId, img):
        self.image_originale = img.scaled(self.resox,self.resoy, Qt.KeepAspectRatio,Qt.SmoothTransformation)
        self.item_issu_originale=self.scene.addPixmap(QPixmap.fromImage(self.image_originale))
    Donc arrivée à ce stade, j'ai un joli arrêt sur image dans ma scene (la caméra tourne toujours derrière) et je peux sauvegarder la chose via:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.image_originale.save(chemin, "PNG",-1)
    lors du visionnage de ma capture, je me suis arrangé à pouvoir surimposer des items (traits)... et j'aimerais pouvoir enregistrer ces items avec la photo.
    mais ma photo présente un type "QGraphicsPixmapItem"
    et mes items un type: "QPixmap".

    En première approche, pour "fusionner" photo/items, j'ai pensé aux lignes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    self.overlays_legende=QPixmap(self.resox,self.resoy)
    painter5=QPainter(self.overlays_legende)
    self.scene.render(painter5)
    1ère question: Est-ce que la logique de fonctionnement globale ne vous parait pas maladroite, lourde ou inadaptée?
    2ième question: Utilliser les Pixmap est-il judicieux ou est-ce qu'il existe un format plus maniable (mon premier but est d'avoir des images de qualité).
    3ième question: Quelle est vraiment la différence entre QPixmap et QGraphicsPixmapItem?
    4ième question: Comment fusionner proprement mes items à ma photo?

    Merci pour votre aide :-)
    Dernière modification par Invité ; 09/03/2017 à 06h41.

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Comme je vois que tu utilises QPainter alors tes items devraient être aussi des QGraphicsItems.

    Pour inclure définitivement les ajouts à l'image il suffit de donner cette image comme parent au painter.

    Ce qui n'empêche pas de les dessiner d'abord sur un calque (il semble que c'est ce que tu fais) pour les positionner plus facilement et ensuite de les inclure dans l'image juste avant de sauvegarder celle-ci.

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

Discussions similaires

  1. QPixMap et QImage
    Par Omega36 dans le forum Qt
    Réponses: 5
    Dernier message: 08/08/2008, 11h50
  2. [Qt]Problème d'affichage d'iamge avec QPixmap
    Par crazy_inf dans le forum Qt
    Réponses: 21
    Dernier message: 03/07/2008, 10h31
  3. Bug des QPixmap sur Qt4.3.1 ?
    Par Nyphel dans le forum Qt
    Réponses: 1
    Dernier message: 07/10/2007, 18h05
  4. [PyQt] Qt Designer et Qpixmap
    Par parp1 dans le forum PyQt
    Réponses: 2
    Dernier message: 17/06/2005, 12h04

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