Logo Mon Club Elec

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

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

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

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 :
PyQt Lab’ : PyQt + OpenCV : Afficher un simple fichier image dans une fenêtre PyQt

Pré-requis

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)

    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

        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.
Noter cet article

Laisser un commentaire

Archive Mon Club Elec

Articles populaires

Newsletter

Inscrivez-vous maintenant et bénéficiez d'un soutien continu pour réaliser vos travaux électriques en toute sécurité.