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)
Était-ce utile?

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?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top