Comment vérifier si une image RVB ne contient qu'une seule couleur?
-
21-08-2019 - |
Question
J'utilise Python et PIL.
J'ai des images en RVB et je voudrais savoir ceux qui ne contiennent qu'une seule couleur (par exemple # FF0000 par exemple) ou quelques couleurs très proches (# FF0000 et # FF0001).
Je pensais à l'aide de l'histogramme, mais il est très difficile de trouver quelque chose avec les 3 bandes de couleurs, donc je suis à la recherche d'un algorithme plus intelligent.
Toutes les idées?
module ImageStat est la réponse! Merci Aaron. J'utilise ImageStat.var pour obtenir la variance et il 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)
La solution
Essayez le ImageStat Module . Si les valeurs renvoyées par sont les mêmes extrema
, il suffit d'une seule couleur dans l'image.
Autres conseils
D'abord, vous devez définir une distance entre deux couleurs. Il vous suffit de vérifier pour chaque pixel qu'il est la distance à votre couleur est assez petit.
Voici un petit extrait, vous pouvez utiliser:
import Image
im = Image.open("path_to_image")
width,height = im.size
for w in range(0,width):
for h in range(0,height):
# this will hold the value of all the channels
color_tuple = im.getpixel((w,h))
# do something with the colors here
Peut-être utiliser un hachage et stocker les tuples comme la clé et il est plusieurs apparitions en tant que valeur?