Bonjour,

J'aimerais obtenir de l'aide pour améliorer ce code.

import cv2
import numpy as np
import pyautogui
import tkinter as tk
from PIL import Image, ImageTk

def filter_color(frame):

Convertir l'image en espace de couleur HSV
hsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

# Définir les limites inférieures et supérieures pour la plage de couleurs spécifiée
lower_bound = np.array([130, 50, 50])
upper_bound = np.array([150, 255, 255])

# Créer un masque pour la plage de couleurs spécifiée
mask = cv2.inRange(hsv_frame, lower_bound, upper_bound)

# Appliquer le masque à l'image d'origine pour isoler la plage de couleurs spécifiée
target_color_mask = cv2.bitwise_and(frame, frame, mask=mask)

# Désaturer les autres pixels de couleur
desaturated_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
colored_mask = cv2.cvtColor(desaturated_frame, cv2.COLOR_GRAY2BGR)

# Combiner l'image filtrée avec les pixels désaturés
result = cv2.addWeighted(target_color_mask, 1, colored_mask, 0.7, 0)

return result

def start_capture():
while True:

Capturer l'écran
    screenshot = pyautogui.screenshot()

    # Convertir l'image en tableau numpy
    frame = np.array(screenshot)
    frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)

    # Appliquer le filtre de couleur
    filtered_frame = filter_color(frame)

    # Convertir l'image OpenCV en format compatible avec Tkinter
    filtered_frame_rgb = cv2.cvtColor(filtered_frame, cv2.COLOR_BGR2RGB)
    filtered_frame_pil = Image.fromarray(filtered_frame_rgb)
    filtered_frame_tk = ImageTk.PhotoImage(image=filtered_frame_pil)

    # Mettre à jour l'affichage dans la fenêtre Tkinter
    label.config(image=filtered_frame_tk)
    label.image = filtered_frame_tk

    # Rafraîchir la fenêtre Tkinter
    root.update()

    # Quitter si la touche 'q' est pressée
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
Créer une fenêtre Tkinter

root = tk.Tk()
root.title("Filtered Screen")

Créer un bouton "Start"

start_button = tk.Button(root, text="Start", command=start_capture)
start_button.pack()

Créer une étiquette pour afficher l'image filtrée

label = tk.Label(root)
label.pack()

Démarrer la boucle principale Tkinter

root.mainloop()

mon filtre fonctionne bien mais c'est la vitesse qui m'embete, je voudrais avoir un filtre en temps reel comme les filtres NVIDIA mais le miens est trop "lent" comment rendre ce filtre plus optimisé et surtout comment l'appliquer sans passer par une fenetre de capture

Aucune réponse