Meine Antwort Zu Der Großteil des Codes in der @ lostsource-Antwort verwendet jedoch eine andere Methode, um zwischen dunklen und hellen Bildern zu unterscheiden.
Zuerst müssen wir (kurz) analysieren, was das Ergebnis der Mittelwert der Summe der RGB-Kanäle ist. Für Menschen ist es bedeutungslos. Ist Rosa heller als grün? Das heißt, warum möchten Sie (0, 255, 0) einen niedrigeren Helligkeitswert als (255, 0, 255) geben? Ist ein mittleres Grau (128, 128, 128) hell wie ein mittleres Grün (128, 255, 0)? Um dies zu berücksichtigen, gehe ich nur auf die Farbhelligkeit des Kanals ein, wie es im HSV-Farbraum geschieht. Dies ist einfach der Maximalwert eines gegebenen RGB-Tripels.
Der Rest ist Heuristiken. Lassen Sie max_rgb = max(RGB_i)
für einen Punkt i
. Wenn max_rgb
niedriger als 128 ist (unter der Annahme eines 8bpp Bildes), dann haben wir einen neuen Punkt i
gefunden, der dunkel ist, ansonsten ist es hell. Indem wir dies für jeden Punkt i
tun, erhalten wir A
Punkte, die hell sind, und B
Punkte, die dunkel sind. Wenn (A - B)/(A + B) >= 0
dann sagen wir, das Bild ist hell. Beachten Sie, dass Sie, wenn jeder Punkt dunkel ist, einen Wert von -1 erhalten, umgekehrt, wenn jeder Punkt hell ist, erhalten Sie +1. Die vorherige Formel kann optimiert werden, so dass Sie Bilder akzeptieren können, die kaum dunkel sind. In dem Code nannte ich die Variable fuzzy
, aber es entspricht nicht dem Feld fuzzy
in Bildverarbeitung. Also sagen wir, das Bild ist hell, wenn (A - B)/(A + B) + fuzzy >= 0
.
Der Code ist bei http://jsfiddle.net/s7Wx2/7/, ist es sehr einfach ist, lassen Sie sich nicht meine Notationen Sie erschrecken.
Der einzige Weg, dies zu tun ist durch eine html