Dispersion avec la bibliothèque standard et l'oreiller de Python Trouvez l'écart type RVB de l'image et déterminez s'il est monochromatique

Je voulais juger si l'image était monochromatique, j'ai donc cherché de diverses manières, mais il ne semble pas y avoir de moyen facile de la vérifier.

En conséquence, si la distribution RVB est de 0, elle doit être jugée comme une seule couleur.

Si vous utilisez numpy ou quelque chose comme ça, vous pouvez faire des calculs distribués rapidement, mais je ne voulais pas mettre numpy juste pour cela, donc je l'ai implémenté uniquement avec la bibliothèque standard et Pillow.

from PIL import Image
rgb = list(Image.open(que.image).getdata())
avg_rgb = [sum(x)/len(rgb) for x in zip(*rgb)]
var_rgb = [sum(map(lambda p: (p - a) ** 2, x)) / len(x) for x, a in zip([t for t in zip(*rgb)], avg_rgb)]
std = sqrt(sum(var_rgb))

Maintenant, il devrait être monochromatique avec sum (var_rgb) == 0

Post-scriptum: Si la dispersion est de 0, elle est un peu trop monochromatique et inutilisable. Il est bon de calculer jusqu'à l'écart type et de l'utiliser. Le seuil dépend de ce que vous voulez juger, mais environ 25 semble être bon pour une utilisation pratique.

En parlant de cela, j'ai eu une erreur disant «décodeur jpeg non disponible» lors de l'obtention du RVB à partir de Pillow's Image.

brew install libjpeg
pip uninstall pillow
pip install pillow

Guéri avec. Il semble que la version de l'oreiller, qui n'incluait pas libjpeg, était ancienne.

Recommended Posts

Dispersion avec la bibliothèque standard et l'oreiller de Python Trouvez l'écart type RVB de l'image et déterminez s'il est monochromatique
Trouvez l'écart moyen / standard des valeurs de luminosité dans l'image
Déterminez si la bibliothèque est installée.
Utilisez Pillow pour rendre l'image transparente et en superposer une partie seulement
POSTER l'image avec json et la recevoir avec flask
Renvoyez les données d'image avec Flask of Python et dessinez-les dans l'élément canvas de HTML
J'ai essayé de trouver l'entropie de l'image avec python
Comparez les mots de passe de connexion par hachage avec hashlib de la bibliothèque standard
Que faire lorsqu'une partie de l'image d'arrière-plan devient transparente lorsque l'image transparente est combinée avec Oreiller
Ce que j'ai fait quand je ne pouvais pas trouver le point caractéristique avec le flux optique d'opencv et quand je l'ai perdu