import cv2
import numpy as np
import matplotlib.pyplot as plt
from skimage import color
- Charger l'image
image = cv2.imread('chemin_vers_votre_image.jpg')
- Convertir de BGR à RGB (OpenCV charge en BGR par défaut)
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
- 1. Créer un masque pour isoler l'endive et exclure l'arrière-plan
- Convertir en HSV pour un meilleur seuillage
image_hsv = cv2.cvtColor(image_rgb, cv2.COLOR_RGB2HSV)
- Définir les bornes pour la détection de l'endive (à ajuster selon vos images)
lower_bound = np.array([0, 0, 100]) # Valeurs HSV minimales
upper_bound = np.array([180, 70, 255]) # Valeurs HSV maximales
mask = cv2.inRange(image_hsv, lower_bound, upper_bound)
- Appliquer le masque pour obtenir uniquement l'endive
endive_only = cv2.bitwise_and(image_rgb, image_rgb, mask=mask)
- 2. Extraire l'intensité de vert indépendamment des autres composantes
- Conversion en espace LAB où 'a' représente l'axe vert-rouge
image_lab = color.rgb2lab(endive_only)
- Extrait le canal 'a' (négatif = vert, positif = rouge)
green_red_channel = image_lab[:,:,1]
- Inverser pour que les valeurs plus élevées représentent plus de vert
green_intensity = -1 * green_red_channel
- Normaliser entre 0 et 255
green_intensity = np.clip(green_intensity, 0, None) # Éliminer les valeurs négatives
green_intensity_normalized = ((green_intensity - green_intensity.min()) /
(green_intensity.max() - green_intensity.min())) * 255
- 3. Créer l'histogramme des intensités de vert (seulement pour les pixels de l'endive)
flat_green = green_intensity_normalized[mask > 0].flatten()
hist, bins = np.histogram(flat_green, bins=256, range=(0, 256))
- 4. Visualiser les résultats
plt.figure(figsize=(15, 10))
- Image originale
plt.subplot(2, 2, 1)
plt.imshow(image_rgb)
plt.title('Image originale')
plt.axis('off')
- Masque de l'endive
plt.subplot(2, 2, 2)
plt.imshow(mask, cmap='gray')
plt.title('Masque de l\'endive')
plt.axis('off')
- Intensité de vert
plt.subplot(2, 2, 3)
plt.imshow(green_intensity_normalized, cmap='Greens')
plt.title('Intensité de vert')
plt.axis('off')
- Histogramme
plt.subplot(2, 2, 4)
plt.bar(bins[:-1], hist, width=1, color='green')
plt.title('Nombre de pixels en fonction de l\'intensité de vert')
plt.xlabel('Intensité de vert (0-255)')
plt.ylabel('Nombre de pixels')
plt.tight_layout()
plt.savefig('resultats_verdissement_endive.png', dpi=300)
plt.show()
Attention c'est une réponse IA.
Utilisation de l'espace colorimétrique LAB: Le canal 'a' dans cet espace représente l'axe vert-rouge indépendamment de la luminosité, ce qui aide à isoler la composante verte sans être influencé par les ombres.
Création d'un masque: Pour isoler l'endive de l'arrière-plan et ne mesurer que les pixels pertinents.
Normalisation: Pour obtenir une mesure cohérente de l'intensité du vert.
Vous devrez ajuster les paramètres lower_bound et upper_bound du masque en fonction de vos images spécifiques. Si vous avez des images de référence ou un arrière-plan standardisé, le masquage devrait fonctionner de manière fiable.