def testCourant2(self): MonImage = ImageDune.ImageDune() MonImage.AttribuerImage(NomImage1) MonImage.setSensCourantGauche(False) self.assertEqual( MonImage.getSensCourantGauche(), False, "Echec - le sens du courant doit être modifié (vers la droite)")
def testResolutionImage2(self): CheminImage = NomImage2 MonImage = ImageDune.ImageDune() MonImage.AttribuerImage(CheminImage) self.assertEqual(MonImage.getResolutionAltitude(), self.CalculResolutionImage(CheminImage, MonImage), "Echec déterminé résolution 2")
def testAltitudeMinimumImage2(self): MonImage = ImageDune.ImageDune() MonImage.AttribuerImage(NomImage2) self.assertEqual(MonImage.getAltitudeMin(), 5.548, "Echec récupération altitude minimum 2")
def testAltitudeMinimumImage1(self): MonImage = ImageDune.ImageDune() MonImage.AttribuerImage(NomImage1) self.assertEqual(MonImage.getAltitudeMin(), 1.95, "Echec récupération altitude minimum 1")
def testCheminImage(self): MonImage = ImageDune.ImageDune() MonImage.AttribuerImage(NomImage1) self.assertEqual(MonImage.getCheminImage(), NomImage1, "Echec du nom de l'image")
def testLargeurImage(self): MonImage = ImageDune.ImageDune() MonImage.AttribuerImage(NomImage1) Largeur = Image.open(NomImage1).size[0] self.assertEqual(MonImage.getLargeurImage(), Largeur, "Echec récupération de de largeur de l'image")
def testHauteurImage(self): MonImage = ImageDune.ImageDune() MonImage.AttribuerImage(NomImage1) Hauteur = Image.open(NomImage1).size[1] self.assertEqual(MonImage.getHauteurImage(), Hauteur, "Echec récupération de l'hauteur de l'image")
def testImageDuneValide5(self): MonImage = ImageDune.ImageDune() ImageValide = MonImage.AttribuerImage(NomImageExistePas) self.assertEqual(ImageValide, False, "Echec Test image 5")
def testImageDuneValide4(self): MonImage = ImageDune.ImageDune() ImageValide = MonImage.AttribuerImage(NomImageIncomplet) self.assertEqual(ImageValide, False, "Echec Test image 4")
def testImageDuneValide3(self): MonImage = ImageDune.ImageDune() ImageValide = MonImage.AttribuerImage(NomImageEchec) self.assertEqual(ImageValide, False, "Echec Test image 3")
def testImageDuneValide2(self): MonImage = ImageDune.ImageDune() ImageValide = MonImage.AttribuerImage(NomImage2) self.assertEqual(ImageValide, True, "Echec Test image 2")
def testCourant1(self): MonImage = ImageDune.ImageDune() MonImage.AttribuerImage(NomImage1) self.assertEqual( MonImage.getSensCourantGauche(), True, "Echec - par défaut le sens du courant est vers la gauche")
def __init__(self, fenetre): Frame.__init__(self, fenetre) self.pack(fill=BOTH) self.MonImage = ImageDune.ImageDune() self.LesAxes = GestionAxes.GestionAxes() self.ResolutionAltitude = 0 # La résolution de l'altitude de l'image → différence d'altitude (cm) entre 2 niveaux de gris self.ImageAffiche = 0 self.PrecedentChoixResolutionImage = "" # Sauvegarder le précédent choix dans la comboBox, pour éventuellement le remettre (si l'utilisateur annule sont nouveau choix de résolution d'affichage de l'image) self.DessinPoint = [ ] # Garder une référence sur l'ensemble des points tracés (pour en permettre leur suppression) self.DessinLigne = [ ] # Garder une référence de l'ensemble des tracés (axes) effectués self.CourantVersLaGauche = True # Cette variable permet de savoir le sens de lecture du courant (par défaut vers la gauche → donnée cliente) # Création d'une sous frame pour placer correctement les divers éléments sur la moitié gauche de la fenêtre FrameMenu = Frame(self) FrameMenu.pack(side=LEFT, fill=BOTH, expand=1) # Création de nos widgets Button(FrameMenu, text='Charger image', command=lambda: self.ChargerImage()).pack(side=TOP) FrameInfoImage = Frame(FrameMenu) FrameInfoImage.pack(side=TOP) Label(FrameInfoImage, text="Seuil détection des petites dunes").grid(row=0, column=0) # L'intervalle de choix de seuil de détection des petites dunes est un entier entre 0 et 100 (par défaut 10) self.SeuilDetectionPetiteDune = Spinbox(FrameInfoImage, from_=0, to=100, width=10) self.SeuilDetectionPetiteDune.grid(row=0, column=1) self.SeuilDetectionPetiteDune.delete( 0 ) # On enlève la valeur par défaut dans la Spinbox (qui est de base la valeur minimum) self.SeuilDetectionPetiteDune.insert( 0, "10") # On place maintenant la valeur 10 comme valeur par défaut # pour récupérer la valeur de la Spinbox, il suffit de faire SeuilDetectionPetiteDune.get() Label(FrameInfoImage, text="cm").grid(row=0, column=2) Label(FrameInfoImage, text="Seuil détection des grandes dunes").grid(row=1, column=0) # L'intervalle de choix de seuil de détection des grandes dunes est un entier entre 0 et 100 (par défaut 50) self.SeuilDetectionGrosseDune = Spinbox(FrameInfoImage, from_=0, to=100, width=10) self.SeuilDetectionGrosseDune.grid(row=1, column=1) self.SeuilDetectionGrosseDune.delete( 0 ) # On enlève la valeur par défaut dans la Spinbox (qui est de base la valeur minimum) self.SeuilDetectionGrosseDune.insert( 0, "50") # On place maintenant la valeur 50 comme valeur par défaut # pour récupérer la valeur de la Spinbox, il suffit de faire SeuilDetectionGrosseDune.get() Label(FrameInfoImage, text="cm").grid(row=1, column=2) Label(FrameInfoImage, text="Sens du courant").grid(row=2, column=0) self.ChoixSensCourant = ttk.Combobox(FrameInfoImage, state="readonly") self.ChoixSensCourant['values'] = ("Vers la gauche", "Vers la droite") self.ChoixSensCourant.set("Vers la gauche") self.ChoixSensCourant.grid(row=2, column=1, columnspan=2) self.ChoixSensCourant.bind("<<ComboboxSelected>>", lambda event: self.ChoisirSensCourant()) self.BoutonDupliquerAxe = Button(FrameMenu, text="Dupliquer axe", state=DISABLED, command=lambda: self.DupliquerAxe()) self.BoutonDupliquerAxe.pack(side=TOP) self.BoutonSupprimerDernierElement = Button( FrameMenu, text="Supprimer dernier axe / point", state=DISABLED, command=lambda: self.SupprimerDernierAxeOuPoint()) self.BoutonSupprimerDernierElement.pack(side=TOP) self.BoutonSupprimerAxes = Button(FrameMenu, text="Supprimer axe(s)", state=DISABLED, command=lambda: self.SupprimerAxes()) self.BoutonSupprimerAxes.pack(side=TOP) self.BoutonTraitementAxes = Button( FrameMenu, text="Traitement axe(s)", state=DISABLED, command=lambda: self.TraitementAxes()) self.BoutonTraitementAxes.pack(side=TOP) self.BoutonTraitementImage = Button( FrameMenu, text="Traitement image", state=DISABLED, command=lambda: self.TraitementImage()) self.BoutonTraitementImage.pack(side=TOP) self.BoutonCoupure = Button(FrameMenu, text="Coupure Image", state=DISABLED, command=lambda: self.CoupureImage()) self.BoutonCoupure.pack(side=TOP) FrameImage = Frame(self) FrameImage.pack(side=RIGHT, fill=BOTH, expand=1) FrameResolutionImage = Frame(FrameImage) FrameResolutionImage.pack(side=TOP) Label(FrameResolutionImage, text="Résolution maximum d'affichage de l'image").pack(side=LEFT) self.ChoixResolutionImage = ttk.Combobox(FrameResolutionImage, state="readonly") self.ChoixResolutionImage['values'] = ("854 x 480", "1280 x 720", "1920 x 1080", "Natives") self.PrecedentChoixResolutionImage = "1280 x 720" self.ChoixResolutionImage.set(self.PrecedentChoixResolutionImage) self.ChoixResolutionImage.pack(side=RIGHT) self.ChoixResolutionImage.bind("<<ComboboxSelected>>", lambda event: self.AffichageImage()) self.Canevas = Canvas(FrameImage) self.Canevas.create_image( 0, 0, anchor=NW ) # Règle l'emplacement du milieu de l'image, ici dans le coin Nord Ouest (NW) de la fenetre self.Canevas.configure(cursor="crosshair") self.Canevas.bind("<Button-1>", self.PlacementPoint) self.Canevas.pack(side=RIGHT, fill=BOTH, expand=1)
def Calcul(self, event): PositionX = event.x PositionY = event.y x, y = self.coupure.coordonnees(PositionX, PositionY) self.DessinPoint.append(Point.Point(x, y)) self.PointsCanvas.append( self.Canevas.create_oval(x - 1, y - 1, x + 1, y + 1, fill="red")) size = len(self.DessinPoint) if (size > 1): self.LignesCanvas.append( self.Canevas.create_line( self.DessinPoint[size - 2].getCoordonnees(), self.DessinPoint[size - 1].getCoordonnees(), fill="red")) if (size == 2): xTemp1, yTemp1 = self.DessinPoint[0].getCoordonnees() xTemp2, yTemp2 = self.DessinPoint[1].getCoordonnees() if (xTemp1 == xTemp2): self.b = True else: self.b = False if (size == 3): x1, y1 = self.DessinPoint[0].getCoordonnees() x2, y2 = self.DessinPoint[2].getCoordonnees() if (self.b): self.DessinPoint.append(Point.Point(x2, y1)) self.PointsCanvas.append( self.Canevas.create_oval(x2 - 1, y1 - 1, x2 + 1, y1 + 1, fill="red")) else: self.DessinPoint.append(Point.Point(x1, y2)) self.PointsCanvas.append( self.Canevas.create_oval(x1 - 1, y2 - 1, x1 + 1, y2 + 1, fill="red")) self.LignesCanvas.append( self.Canevas.create_line(self.DessinPoint[3].getCoordonnees(), self.DessinPoint[0].getCoordonnees(), fill="red")) self.LignesCanvas.append( self.Canevas.create_line(self.DessinPoint[2].getCoordonnees(), self.DessinPoint[3].getCoordonnees(), fill="red")) imageResultat = [] xMin = 0 xMax = 0 yMin = 0 yMax = 0 if (y1 < y2): yMin = y1 yMax = y2 else: yMin = y2 yMax = y1 #print(x1, x2, yMin, yMax) while (yMin <= yMax): imageResultat.append([]) size = len(imageResultat) if (x1 < x2): xMin = x1 xMax = x2 else: xMin = x2 xMax = x1 while (xMin <= xMax): imageResultat[size - 1].append( self.monImageListe[yMin][xMin]) xMin += 1 yMin += 1 ImageAEnvoyee = ImageDune.ImageDune() ImageAEnvoyee.setImage(imageResultat) ImageAEnvoyee.setResolution(self.resolution) fenTraitementImage = Toplevel() fenTraitementImage.title( "Demande des données - Analyse dunes 2018") CalculLPE.CalculLPE(fenTraitementImage, ImageAEnvoyee, self.miniature, self.seuilDetection, True)