Projet

Général

Profil

Feature #12681 » main.py

dernière version - Anonyme, 12/11/2020 10:45

 
import show
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QMessageBox, QTableWidgetItem
from PyQt5.QtGui import QIcon, QImage, QPixmap
from PyQt5.QtCore import QThread
import sys
import os
import cv2
import numpy as np


'''Voici le multi-processus dans pyqt5 pour afficher des images et éviter le blocage de l'interface'''
class imageThread(QThread):
def __init__(self, image):
super().__init__()
self.image = image

def run(self):
image = self.image
try:
# print(image.shape, 'cv')
Qimag = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) # Convertir le canal de l'image de RVB en BGR
except Exception as e:
Qimag = np.array(image) # Converti en type numpy, notez que (w, h) -> (h, w, 3)
# print(Qimag.shape, 'QIMage')
(imageH, imageW) = Qimag.shape[0:2] # Trouvez la largeur et la hauteur de l'image
QiM = QImage(Qimag.data, imageW, imageH,
imageW * 3, QImage.Format_RGB888) # Convertir le format de données d'image
return QiM
# ui..setPixmap(QPixmap.fromImage(QiM))

# Ouvrez l'interface de sélection des fichiers
def select_image():
try:
filename, filetype = QFileDialog.getOpenFileName(mainwindow, "sélectionner l'image ", 'F:', "Text Files (*.jpg);;All Files (*)")
# ouvrir l'interface de sélection des fichier et sélectionner
image = cv2.imdecode(np.fromfile(filename, dtype=np.uint8), 1) # Lire l'image
if image.shape[0] > 1000: # L'image est trop grande ,il a besoin de réduire la taille
image = cv2.resize(image, (int(image.shape[1]*0.3), int(image.shape[0]*0.3)), interpolation=cv2.INTER_AREA)
p = imageThread(image) # Démarrer le thread
image = p.run() # exécuter le thread
ui.show_image.setPixmap(QPixmap.fromImage(image)) # afficher l'image sur l'interface
except Exception as e:
# print(e)
pass

# sélectionner la camera
def select_camara():
try:
label = ui.which_camara.currentText() # Obtenez le numéro de caméra à sélectionner
if label == 'local camera':
label = 0
elif label == 'external camera':
label = 1
cap = cv2.VideoCapture(label, cv2.CAP_DSHOW) # L'ajout du deuxième paramètre peut éviter certains avertissements, cette fonction est pour ouvrir la caméra
print(cap.isOpened()) # cap.isOpened()Cette fonction renvoie le résultat indiquant est-ce que la caméra est ouverte
if cap.isOpened():
_, frame = cap.read() # Lire la première frame de l'image
p = imageThread(frame) # Démarrer le thread
image = p.run() # exécuter le thread
ui.show_image.setPixmap(QPixmap.fromImage(image)) #afficher l'image sur l'interface
except Exception as e:
print(e)
pass




if __name__ == '__main__':
app = QApplication(sys.argv)
mainwindow = QMainWindow()
ui = show.Ui_MainWindow()
ui.setupUi(mainwindow)
mainwindow.setWindowTitle('Image display') # nommer l'interface
# mainwindow.setWindowIcon(QIcon('logo.ico'))

mainwindow.show()
ui.select_image.clicked.connect(select_image) # Cliquez sur le bouton pour déclencher la fonction
ui.select_camara.clicked.connect(select_camara)
sys.exit(app.exec_())
(2-2/5)