Dispersion mit Pythons Standardbibliothek und Kissen Ermitteln Sie die RGB-Standardabweichung des Bildes und stellen Sie fest, ob es monochromatisch ist

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

Dispersion mit Pythons Standardbibliothek und Kissen Ermitteln Sie die RGB-Standardabweichung des Bildes und stellen Sie fest, ob es monochromatisch ist
Finden Sie den Durchschnitt / die Standardabweichung der Helligkeitswerte im Bild
Stellen Sie fest, ob die Bibliothek installiert ist.
Verwenden Sie Pillow, um das Bild transparent zu machen und nur einen Teil davon zu überlagern
POST das Bild mit json und erhalte es mit der Flasche
Geben Sie die Bilddaten mit Flask of Python zurück und zeichnen Sie sie in das Canvas-Element von HTML
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Vergleichen Sie Anmeldekennwörter durch Hashing mit der Hash-Bibliothek der Standardbibliothek
Was tun, wenn ein Teil des Hintergrundbilds transparent wird, wenn Sie transparente Bilder mit Pillow kombinieren?
Was ich getan habe, als ich den Feature-Punkt mit dem optischen Fluss von opencv nicht finden konnte und als ich ihn verloren habe