Wie bekomme ich Farbtemperatur aus Farbkorrektur

Ich versuche, die Farbtemperatur eines von der Kamera aufgenommenen Fotos herauszufinden.

final CameraCaptureSession.CaptureCallback previewSSession = new CameraCaptureSession.CaptureCallback() { @Override public void onCaptureStarted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, long timestamp, long frameNumber) { super.onCaptureStarted(session, request, timestamp, frameNumber); } @Override public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, TotalCaptureResult result) { super.onCaptureCompleted(session, request, result); RggbChannelVector rggbChannelVector = result.get(CaptureResult.COLOR_CORRECTION_GAINS); getColorTemperature(rggbChannelVector); startCamera(); } }; private void getColorTemperature(RggbChannelVector rggbChannelVector) { //rggbChannelVector.getRed() = 2.192929 //rggbChannelVector.getGreenEven() = 1.0 //rggbChannelVector.getGreenOdd() = 1.0 //rggbChannelVector.getBlue() = 1.832323 } 

IOS scheint eine leicht verfügbare Methode zu haben, um diese TemperaturAndTintValues zu tun

  • Warum sind Android-Popup-Nachrichten Toasts genannt?
  • Wie benutzt man http / 2 mit Okhttp auf Android Geräten?
  • Wie man mit dem Entfernen einer Erlaubnis für einen Broadcast-Receiver in Android M?
  • Einfache OCR App mit Android-Kamera
  • Soll ich die Größe der Bitmap ändern, bevor ich eine ImageView hinzufüge oder die ImageView die Bitmap ändern möchte?
  • Smack wirft "NoClassDefFoundError: Fehlerhafte Auflösung von: Lorg / jxmpp / util / XmppStringUtils"
  • Bei der Suche nach etwas Ähnlichem (in Java oder einer anderen Sprache, die ich annehmen kann), erwarten fast alle diese Methoden einen RGB-Wert mit [0, 255] Bereich.

    Es gibt nur wenige Methoden, um XYZ in CCT umzuwandeln (Correlated Color Temperature), aber auch um den XYZ-Wert richtig zu bekommen, brauche ich RGB-Werte mit in [0, 255]

    Wie Sie sehen können, sind die Werte von COLOR_CORRECTION_GAINS >1 dh größer als 255, was nicht ungewöhnlich ist, weil seine Verstärkung und iOS ähnliche Werte (größer als 1) zurückgibt.

  • Wie bekomme ich Toast in Android?
  • Klick von Artikel aus Listenansicht
  • Die Verschiedene zwischen Android-Ordner (bin, xbin, sbin)
  • Warum ist die erste Ansicht in ViewPager leer?
  • Streaming-Bibliothek VLC Android
  • Android: Get View Verweis auf ein Menüpunkt
  • One Solution collect form web for “Wie bekomme ich Farbtemperatur aus Farbkorrektur”

    Da haben Sie über Apfel gegeben Methode zur Erreichung der gleichen erwähnt.

    Ich fange mit Apple Dokumentation über die Methode

    Von Apple Dokumentation

    Apfelunterlagen bezüglich temperatureAndTintValues ist wie folgt

    Konvertiert gerätespezifische Weißabgleich RGB-Verstärkungswerte auf geräteunabhängige Temperatur- und Farbwerte.

    Referenz: Dokumentation von Apple

    Gleiche Funktionalität können wir in Android auch durch die folgenden Methoden implementieren.

    Finden Sie die RGB-Komponenten in Position

     int x = (int)event.getX(); int y = (int)event.getY(); int pixel = bitmap.getPixel(x,y); int redValue = Color.red(pixel); int blueValue = Color.blue(pixel); int greenValue = Color.green(pixel); 

    Correlated Color Temperature (CCT), die in Grad Kelvin (K) auf einer Skala von 1.000 bis 10.000 gemessen wird.

    Das folgende Bild zeigt die Beziehung zwischen CCT und einigen Farben Bildbeschreibung hier eingeben


    Berechnung der Farbtemperatur vom RGB-Wert

    Nach dem SO Post kann die Farbtemperatur leicht mit den folgenden Formeln berechnet werden

    1. CIE tristimulus Werte (XYZ) wie folgt herausfinden:

     X=(−0.14282)(R)+(1.54924)(G)+(−0.95641)(B) Y=(−0.32466)(R)+(1.57837)(G)+(−0.73191)(B)=Illuminance Z=(−0.68202)(R)+(0.77073)(G)+(0.56332)(B) 

    2. Berechnen Sie die normierten Farbwerte:

     x=X/(X+Y+Z) y=Y/(X+Y+Z) 

    3. Berechnen Sie den CCT-Wert aus:

     CCT=449n3+3525n2+6823.3n+5520.33 where n=(x−0.3320)/(0.1858−y) 

    Konsolidierte Formel (CCT von RGB)

     CCT=449n3+3525n2+6823.3n+5520.33 where n=((0.23881)R+(0.25499)G+(−0.58291)B)/((0.11109)R+(−0.85406)G+(0.52289)B) 

    Android

    Implementiere die gleiche Gleichung mit Java.

    Hinweis: Referenzpapier

    Berechnung der Farbtemperatur und Beleuchtungsstärke mit dem digitalen Farbsensor TAOS TCS3414CS


    Ähnliche Implementierungen in anderen Plattformen

    PHP – SO Post

    Python – SO Post

    Hinweis:

    Das Problem bei der Umwandlung von RGB in Farbtempo ist, dass es etwa 16 Millionen RGB-Farben gibt, aber nur eine sehr kleine Untermenge dieser Farben entspricht tatsächlich einer Farbtemperatur.

    Zum Beispiel Eine grüne Farbe entspricht keiner Temperatur – es ist unmöglich, wie das menschliche Gehirn Licht wahrnimmt. Denken Sie daran, dass die Demo oben wirklich nur eine Annäherung ist, wäre es theoretisch möglich, die Temperatur mit einer gegebenen Farbe zu betrachten, aber es würde nicht für die meisten Farben funktionieren.

    Warum ist Grün ausgeschlossen? Lesen: Warum gibt es keine lila oder grünen Sterne?


    Viele der Erklärungen werden von anderen Seiten genommen,

    Hoffe alles, was bis zu deiner Notwendigkeit!

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.