Cómo obtener la temperatura de color de la ganancia de corrección de color
Estoy tratando de averiguar la temperatura de color de una foto capturada por la cámara.
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 parece tener un método fácilmente disponible para hacer que temperatureAndTintValues
- Android aplicar color a la animación alfa
- AppCompat Color del título
- Cómo obtener el lienzo pixel
- Cambiar el color de fondo del primer elemento en ListView
- Color Estado Lista no reconocida en forma Drawable
Mientras busco algo similar (en Java o cualquier otro lenguaje que pueda adoptar), casi todos estos métodos esperan un valor RGB con [0, 255]
rango.
Existen pocos métodos para convertir XYZ a CCT (Temperatura de color correlacionada), pero incluso para obtener el valor XYZ correcto, necesito valores RGB con [0, 255]
Como se puede ver los valores de COLOR_CORRECTION_GAINS
son >1
es decir, mayor que 255 que no es inusual porque su una ganancia y iOS devuelve valores similares (mayor que 1).
- Programar un color de forma más transparente
- Cómo convertir el código Color.RED en valores enteros de color en Android Java?
- Androide. Color CheckBoxPreference
- ¿Cómo cambiar el tema de color de la aplicación Android?
- El fondo de vista de Android cambia inesperadamente
- Cómo cambiar el cuadro de diálogo de alerta divider color android
- ¿Cómo configurar el color / estilo personalizado de ActionBar?
- Colores hexagonales en Android son algunas veces 8 dígitos. ¿Cómo? ¿Cuál es la diferencia entre #FFFFFF y # FFFFFF00
Puesto que usted ha mencionado sobre la manzana proporcionó el método para alcanzar el mismo.
Estoy empezando con la documentación de Apple sobre el método
De la documentación de Apple
La documentación de Apple con respecto a temperatureAndTintValues
es la siguiente
Convierte los valores de ganancia RGB de balance de blancos específicos del dispositivo a valores de temperatura y tinte independientes del dispositivo.
Referencia: Documentación de Apple
La misma funcionalidad que podemos implementar en android también siguiendo los siguientes métodos.
Descubre los componentes RGB en posición
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);
Temperatura de color correlacionada (CCT) que se mide en grados Kelvin (K) en una escala de 1.000 a 10.000.
La siguiente imagen muestra la relación entre CCT y algunos colores
Calcular la temperatura de color desde el valor RGB
De acuerdo con el SO Post La temperatura del color se puede calcular fácilmente usando las siguientes fórmulas
1. Averigüe los valores de CIE tristimulus (XYZ) como sigue:
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. Calcular los valores de cromaticidad normalizada:
x=X/(X+Y+Z) y=Y/(X+Y+Z)
3. Calcule el valor CCT de:
CCT=449n3+3525n2+6823.3n+5520.33 where n=(x−0.3320)/(0.1858−y)
Fórmula consolidada (CCT de 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)
Androide
Implementar la misma ecuación usando java.
Nota: Documento de referencia
Cálculo de la temperatura de color y la iluminación mediante el sensor de color digital TAOS TCS3414CS
Implementaciones similares en otras plataformas
PHP – SO Post
Python – SO Post
Nota:
El problema con la conversión de RGB a tempperature de color es que hay aproximadamente 16 millones de colores RGB, pero sólo un subconjunto muy pequeño de esos colores realmente corresponden a una temperatura de color.
Por ejemplo Un color verde no corresponde a ninguna temperatura – es imposible debido a cómo el cerebro humano percibe la luz. Recordando que la demostración anterior es realmente sólo una aproximación, sería teóricamente posible buscar la temperatura asociada con un color dado, pero no funcionaría para la mayoría de los colores.
¿Por qué se excluye Green? Leer: ¿Por qué no hay estrellas púrpuras o verdes?
Muchas de las explicaciones se toman de otros sitios,
Espero que todo suma a su necesidad!
- ListView con el primer elemento visible que tiene un diseño diferente
- OnLocationChanged no se llama automáticamente