Intermédiaire
🧠 Fondamentaux
20 XP
0 personnes ont réussi
Seuillage d'une image (thresholding)
C'est comme ça qu'on sépare le texte du fond sur un scan de document. L'OCR (reconnaissance de caractères), la détection de plaques d'immatriculation, le comptage de cellules au microscope, tout commence par un seuillage. C'est l'opération la plus simple et la plus utilisée pour transformer une image complexe en quelque chose qu'un algorithme peut facilement analyser.
Imagine un filtre à café. Le café passe, le marc reste. Le seuillage fonctionne pareil : tu choisis un niveau de gris (le seuil), et tu décides que tout ce qui est au-dessus devient blanc, tout ce qui est en dessous devient noir. Le résultat est une image binaire : que du noir et du blanc, rien entre les deux.
En pratique, tu utiliserais cv2.threshold(image, seuil, 255, cv2.THRESH_BINARY) qui fait exactement ça en une ligne, avec des variantes comme le seuillage adaptatif (cv2.adaptiveThreshold) qui ajuste le seuil localement. Ici on le fait avec NumPy pour bien comprendre la mécanique.
Avec NumPy, pas besoin de boucle. La comparaison image > seuil te donne un tableau de booléens. Tu multiplies par 255 pour obtenir 0 ou 255 :
résultat = (image > seuil).astype(np.uint8) * 255
Écris deux fonctions :
seuillage_simple(image_gris, seuil) qui prend une image en niveaux de gris et un seuil (int entre 0 et 255), et renvoie une image binaire (0 ou 255, dtype uint8). Les pixels strictement supérieurs au seuil deviennent 255, les autres 0.
seuillage_inverse(image_gris, seuil) qui fait l'inverse : les pixels inférieurs ou égaux au seuil deviennent 255, les supérieurs deviennent 0.
Exemple : img = np.array([[50, 150], [200, 100]], dtype=np.uint8) seuillage_simple(img, 128) donne [[0, 255], [255, 0]]
Ce que tu devrais voir sur ta machine : avec une photo en niveaux de gris et un seuil bien choisi, les objets principaux apparaissent en blanc sur fond noir.