Bonjour,
Vous dites avoir un début de code, mais où est-il donc ?
Si vous le poster, merci d'utiliser les outils adéquats, voir https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code.
Bonjour, tout a fait le code est le suivant :
import cv2 import random import tkinter as tk from tkinter import Canvas, Button, messagebox from PIL import Image, ImageTk from functools import partial def generer_erreurs(image): img_avec_erreurs = image.copy() # Coordonnées manuelles des erreurs (en pixels) erreur_coords = [(100, 200), (300, 400), (500, 600), (700, 800), (900, 1000)] for x, y in erreur_coords: couleur = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) cv2.circle(img_avec_erreurs, (x, y), 10, couleur, -1) return img_avec_erreurs, erreur_coords def afficher_images(image_originale, image_avec_erreurs, erreur_coords): fenetre = tk.Tk() fenetre.title("Jeu des erreurs") fenetre_width = image_originale.shape[1] * 2 fenetre_height = max(image_originale.shape[0], image_avec_erreurs.shape[0]) canvas = Canvas(fenetre, width=fenetre_width, height=fenetre_height) canvas.pack() img_orig = ImageTk.PhotoImage(image=Image.fromarray(cv2.cvtColor(image_originale, cv2.COLOR_BGR2RGB)).resize((image_originale.shape[1], fenetre_height))) img_erreurs = ImageTk.PhotoImage(image=Image.fromarray(cv2.cvtColor(image_avec_erreurs, cv2.COLOR_BGR2RGB)).resize((image_avec_erreurs.shape[1], fenetre_height))) canvas.create_image(0, 0, anchor=tk.NW, image=img_orig) canvas.create_image(image_originale.shape[1], 0, anchor=tk.NW, image=img_erreurs) def clic_erreur(event, erreur_coords): nonlocal erreurs_trouvees # Convertir les coordonnées de la fenêtre tkinter en coordonnées d'image x_image = event.x - image_originale.shape[1] y_image = event.y reponses.append((x_image, y_image)) # Vérifier si le clic est à proximité d'une erreur for erreur_x, erreur_y in erreur_coords: if abs(x_image - erreur_x) < 15 and abs(y_image - erreur_y) < 15: erreurs_trouvees += 1 canvas.create_oval(event.x - 5, event.y - 5, event.x + 5, event.y + 5, outline="red", width=2) break if erreurs_trouvees == 5: messagebox.showinfo("Bravo !", "Vous avez trouvé toutes les erreurs.") fenetre.quit() canvas.bind("<Button-1>", partial(clic_erreur, erreur_coords=erreur_coords)) reponses = [] erreurs_trouvees = 0 fenetre.mainloop() def jouer_jeu(): image_originale = cv2.imread("image_originale.jpg") if image_originale is None: print("L'image n'a pas pu être chargée.") return image_avec_erreurs, erreur_coords = generer_erreurs(image_originale) afficher_images(image_originale, image_avec_erreurs, erreur_coords) if __name__ == "__main__": jouer_jeu()
Merci d'avance,
Cordialement.
Bonjour,
j'ai mis pour tester Random et masquer les zones d'erreurs mais impossible a masquer
j'ai ajouter le système de clic il fonctionne maintenant pour un clic une erreur.
Cdt
ce qui donne le code suivant : import cv2 import random import tkinter as tk from tkinter import Canvas, Button, messagebox from PIL import Image, ImageTk from functools import partial def generer_erreurs(image): img_avec_erreurs = image.copy() # Coordonnées manuelles des erreurs (en pixels) erreur_coords = [(100, 200), (300, 400), (500, 600), (700, 800), (900, 1000)] for x, y in erreur_coords: couleur = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) cv2.circle(img_avec_erreurs, (x, y), 10, couleur, -1) return img_avec_erreurs, erreur_coords def afficher_images(image_originale, image_avec_erreurs, erreur_coords): fenetre = tk.Tk() fenetre.title("Jeu des erreurs") fenetre_width = image_originale.shape[1] * 2 fenetre_height = min(image_originale.shape[0], image_avec_erreurs.shape[0]) canvas = Canvas(fenetre, width=fenetre_width, height=fenetre_height) canvas.pack() img_orig = ImageTk.PhotoImage(image=Image.fromarray(cv2.cvtColor(image_originale, cv2.COLOR_BGR2RGB)).resize((image_originale.shape[1], fenetre_height))) img_erreurs = ImageTk.PhotoImage(image=Image.fromarray(cv2.cvtColor(image_avec_erreurs, cv2.COLOR_BGR2RGB)).resize((image_avec_erreurs.shape[1], fenetre_height))) canvas.create_image(0, 0, anchor=tk.NW, image=img_orig) canvas.create_image(image_originale.shape[1], 0, anchor=tk.NW, image=img_erreurs) def clic_erreur(event, erreur_coords, erreurs_visibles): nonlocal erreurs_trouvees, jeu_termine if jeu_termine: return # Convertir les coordonnées de la fenêtre tkinter en coordonnées d'image x_image = event.x - image_originale.shape[1] y_image = event.y reponses.append((x_image, y_image)) # Vérifier si le clic est à proximité d'une erreur for i, (erreur_x, erreur_y) in enumerate(erreur_coords): if abs(x_image - erreur_x) < 15 and abs(y_image - erreur_y) < 15 and not erreurs_visibles[i]: erreurs_visibles[i] = True erreurs_trouvees += 1 canvas.create_oval(event.x - 5, event.y - 5, event.x + 5, event.y + 5, outline="red", width=2) break if erreurs_trouvees == 5: messagebox.showinfo("Bravo !", "Vous avez trouvé toutes les erreurs.") jeu_termine = True fenetre.quit() erreurs_visibles = [False] * 5 canvas.bind("<Button-1>", partial(clic_erreur, erreur_coords=erreur_coords, erreurs_visibles=erreurs_visibles)) reponses = [] erreurs_trouvees = 0 jeu_termine = False fenetre.mainloop() def jouer_jeu(): image_originale = cv2.imread("image_originale.jpg") if image_originale is None: print("L'image n'a pas pu être chargée.") return image_avec_erreurs, erreur_coords = generer_erreurs(image_originale) afficher_images(image_originale, image_avec_erreurs, erreur_coords) if __name__ == "__main__": jouer_jeu()
En fait c'est le système de choix des coordonnées pour les erreurs avant le lancement du jeu dont j'aurais besoin.
Cdt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionJe me permets d'ajouter ce message car j'ai résolu mon problème en changeant mon début de code en un autre plus complet, merci pour vos réponses.
Bonjour
je marque donc ton sujet résolu.
Bonnes fêtes