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 :
- Ces codes sont disponibles ici : tuto_pyqt_opencv_load_image/tuto_pyqt_opencv_load_image
- A télécharger en ligne de commande avec :
$ 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 :
# 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
# -*- 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.
Articles similaires:
- PyQt Lab’ : PyQt + OpenCV : Sélectionner un fichier image et afficher l’image avec OpenCV dans une interface PyQt
- PyQt Lab’ : Les Bases : L’interface graphique minimale.
- PyQt Lab’ : Créer une image couleur RGB à l’aide d’un tableau numpy
- PyQt Lab’ : Appliquer une opération mathématique f(x,y) à tous les pixels d’une image en niveaux de gris
- PyQt Lab’ : Dessin : Dessiner un simple cercle par accès direct aux pixels
Articles Liés
- PyQt Lab' : Modifier la couleur de fond d'une image lors d'un clic souris
PyQt Lab est un outil puissant qui permet aux utilisateurs de modifier facilement la couleur…
- PyQt Lab' : Dessin :
PyQt Lab est un logiciel de dessin innovant qui permet aux utilisateurs de créer des…
- PyQt Lab' : Dessiner le pixel sous le curseur souris tant que bouton souris appuyé
PyQt Lab est un outil puissant qui permet aux développeurs de créer des applications graphiques…