J'utilise Python et PIL.Comment vérifier si une image RVB ne contient qu'une seule couleur?
J'ai des images en RVB et j'aimerais savoir celles qui ne contiennent qu'une seule couleur (disons # FF0000 par exemple) ou quelques couleurs très proches (# FF0000 et # FF0001).
Je pensais utiliser l'histogramme mais il est très difficile de trouver quelque chose avec les 3 bandes de couleurs, donc je cherche un algorithme plus intelligent.
Des idées?
Le module ImageStat est LA solution! Merci Aaron. J'utilise ImageStat.var pour obtenir la variance et cela fonctionne parfaitement.
Voici mon morceau de code:
from PIL import Image, ImageStat
MONOCHROMATIC_MAX_VARIANCE = 0.005
def is_monochromatic_image(src):
v = ImageStat.Stat(Image.open(src)).var
return reduce(lambda x, y: x and y < MONOCHROMATIC_MAX_VARIANCE, v, True)
Calculer la distance euclidienne entre chaque pixel dans l'espace RGB à 3 dimensions est théoriquement correct, mais je pense qu'il ne fonctionnera pas avec des images de plusieurs millions de pixels ... (au moins en Python) –
Pourquoi la distance euclidienne? Vous pouvez imaginer autre chose en fonction de ce que vous voulez. – SmuK
Le problème n'est pas dans le type de distance, mais dans le fait que l'algorithme est O (N^2), N étant le nombre de pixels dans l'image (j'ai cas avec N = 10,000,000) –