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:
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 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
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:
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
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))
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part self.image_originale.save(chemin, "PNG",-1)
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:
1ère question: Est-ce que la logique de fonctionnement globale ne vous parait pas maladroite, lourde ou inadaptée?
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)
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 :-)
Partager