Résolu sur le forum : Borne Wallbox Pulsar Plus 7,4 kW sur abonnement 6 kVA : quel délestage avant accord copro (urgent)Ma panne diagnostiquée — réponse sous 48 h29 €

PyQt Lab’ : PyQt + OpenCV : Afficher un simple fichier image dans une fenêtre PyQt

Électroniquemis à jour le 24 avril 2023

PyQt Lab est un outil puissant qui permet aux développeurs de créer des applications graphiques à l’aide de PyQt et OpenCV. Dans cet article, nous allons vous montrer comment afficher un simple fichier image dans une fenêtre PyQt. Nous allons vous guider pas à pas à travers le processus de création d’une application graphique qui affiche une image dans une fenêtre PyQt. Nous allons également vous montrer comment utiliser OpenCV pour traiter l’image et comment intégrer le résultat dans votre application.

PyQt Lab’ : PyQt + OpenCV : Afficher un simple fichier image dans une fenêtre PyQt

Par X. HINAULT – Juin 2013

Ce que l’on va faire ici

  • Dans ce code PyQt, interface permettant d’afficher un simple fichier image dans une fenêtre PyQt. Le truc consiste à utiliser un QLabel normalement destiné à afficher du texte. Ce code basique ne redimensionne pas l’image qui devra être de taille 320×240 pixels.
  • Une image de test à placer dans le même répertoire que les codes *.py et *Main.py qui suivent :

Pré-requis

  • python 2.7
  • pyqt4.x
  • modules :
    • python-opencv
    • ma librairie perso pyqtcv qui implémente plusieurs fonctions utiles pour utiliser facilement Opencv avec PyQt.

Téléchargement :

$ cd scripts_pyqt
$ mkdir  tuto_pyqt_opencv_load_image
$ cd tuto_pyqt_opencv_load_image
$ wget -4 -N https://raw.github.com/sensor56/PyQt-Lab/master/OpenCV/tuto_pyqt_opencv_load_image/tuto_pyqt_opencv_load_image.py
$ wget -4 -N https://raw.github.com/sensor56/PyQt-Lab/master/OpenCV/tuto_pyqt_opencv_load_image/tuto_pyqt_opencv_load_imageMain.py

Le fichier d’interface *.py

  • Fichier obtenu automatiquement avec l’utilitaire pyuic4 à partir du fichier *.ui créé avec QtDesigner :
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file
#
# Created: Tue Dec 11 20:46:06 2012
#      by: PyQt4 UI code generator 4.9.1
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8(« Form »))
        Form.resize(341, 264)
        self.labelImage = QtGui.QLabel(Form)
        self.labelImage.setGeometry(QtCore.QRect(10, 10, 320, 240))
        self.labelImage.setFrameShape(QtGui.QFrame.Box)
        self.labelImage.setFrameShadow(QtGui.QFrame.Sunken)
        self.labelImage.setText(_fromUtf8(«  »))
        self.labelImage.setObjectName(_fromUtf8(« labelImage »))

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

UnePrincipes d’utilisation des alimentations avec une carte Arduino et des servomoteurs

    def retranslateUi(self, Form):
        Form.setWindowTitle(QtGui.QApplication.translate(« Form », « load Image », None, QtGui.QApplication.UnicodeUTF8))

if __name__ == « __main__ »:
    import sys
    app = QtGui.QApplication(sys.argv)
    Form = QtGui.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())
 

Le fichier d’application *Main.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

# Par X. HINAULT – Tous droits réservés – GPLv3
# Déc 2012 – www.mon-club-elec.fr

# — importation des modules utiles —
from PyQt4.QtGui import *
from PyQt4.QtCore import * # inclut QTimer..

import os,sys
from cv2 import * # importe module OpenCV – cv est un sous module de cv2

sys.path.insert(0,‘/home/xavier’) # si pas path système
from pyqtcv import * # importe librairie perso comportant fonctions utiles pour utiliser opencv avec pyqt

# — importation du fichier de description GUI —
from tuto_pyqt_opencv_load_image import *

# — classe principale du programme pyQt contenant le code actif —
class myApp(QWidget, Ui_Form):
# la classe reçoit le Qwidget principal ET la classe Ui_Form définie dans *.py obtenu avec pyuic4

        # Note : ici self représente la classe

UneL’appui sur un BP allume une LED.

        def __init__(self, parent=None):
                QWidget.__init__(self) # initialise le Qwidget principal
                self.setupUi(parent) # Obligatoire

                #– variables utiles —

                #— code actif initial
                self.iplImage=cv.LoadImage(« test.jpg », cv.CV_LOAD_IMAGE_COLOR) # charge l’image sous forme d’une iplImage 3 canaux
                self.qImage=IplToQImage(self.iplImage) # récupère l’IplImage dans un QImage – fonction pyqtcv
                self.qPixmap=QPixmap.fromImage(self.qImage) # récupère le QImage dans un QPixmap
                self.labelImage.setPixmap(self.qPixmap) # affiche l’image dans le label
                # NB : pour éviter les problèmes, les objets de manipulation d’image doivent être « self »

# fonction principale exécutant l’application Qt                       
def main(args):
        a=QApplication(args) # crée l’objet application
        f=QWidget() # crée le QWidget racine
        c=myApp(f) # appelle la classe contenant le code de l’application
        f.show() # affiche la fenêtre QWidget
        r=a.exec_() # lance l’exécution de l’application
        return r

# pour rendre le fichier *.py exécutable
if __name__==« __main__ »: # pour rendre le code exécutable
        main(sys.argv) # appelle la fonction main

Utilisation

  • Les 2 fichiers suivants sont à enregistrer dans un même répertoire, l’un en nom.py et l’autre en nomMain.py.
  • Puis lancer l’application depuis Geany ou équivalent, en exécutant le fichier nomMain.py
  • L’image est chargée dans la fenêtre PyQt : tout bête.

Donnez votre avis

Soyez le 1er à noter cet article
ou bien laissez un avis détaillé


Partagez cet article maintenant !


Ça ne règle pas votre cas ?

Décrivez la panne sur le forum, avec une photo si vous pouvez : les membres qui ont eu la même répondent, et le sujet reste pour les suivants.

Avatar photoAvatar photoAvatar photoAvatar photoAvatar photoRejoindre les 54 membres — gratuit, 44 pannes résolues

Dans le même tiroir

Réagissez à cet article

La lettre du club

Une lettre par mois, accrochée au panneau

Les sujets du forum résolus dans le mois, un guide, un chiffre qu’on peut vérifier chez soi. Rien d’autre, jamais plus souvent — et on se désabonne d’un clic.

Ce qu’il y a dedans

Votre adresse

Une lettre par mois. Désabonnement en un clic.

Partagez votre réaction