Ich wollte beurteilen, ob das Bild einfarbig ist, also habe ich verschiedene Suchanfragen durchgeführt, aber es scheint keine einfache Möglichkeit zu geben, es zu überprüfen.
Wenn die Verteilung von RGB 0 ist, sollte dies als eine einzige Farbe beurteilt werden.
Wenn Sie numpy oder etwas anderes verwenden, können Sie schnell verteilte Berechnungen durchführen, aber ich wollte numpy nicht nur dafür einfügen, also habe ich es nur mit der Standardbibliothek und Pillow implementiert.
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))
Jetzt sollte es monochromatisch mit sum (var_rgb) == 0
sein
Nachtrag: Wenn die Dispersion 0 ist, ist sie etwas zu monochromatisch und unbrauchbar. Es ist gut, bis zur Standardabweichung zu berechnen und diese zu verwenden. Die Schwelle hängt davon ab, was Sie beurteilen möchten, aber ungefähr 25 scheinen für den praktischen Gebrauch gut zu sein.
Apropos, ich habe eine Fehlermeldung erhalten, dass "Decoder-JPEG nicht verfügbar" ist, wenn RGB von Pillow's Image abgerufen wird.
brew install libjpeg
pip uninstall pillow
pip install pillow
Geheilt mit. Es scheint, dass die Version des Kissens, die libjpeg nicht enthielt, alt war.
Recommended Posts