Estoy tratando de automatizar la mejora de algunas imágenes que se van a transferir a un marco digital. Tengo un código en su lugar que cambia el tamaño, agrega una fecha/hora al rincón menos significativo (menos detalles) de la imagen y pega pares de imágenes verticales para evitar mostrar un solo retrato en la pantalla de baja resolución 41:20 del marco.Conversión de RGB a HSV usando PIL
Implementé un filtro de estiramiento del brillo para aquellas imágenes donde la iluminación no era tan buena, usando la función colorsys.rgb_to_hsv
para calcular las bandas H, S, V, operando en la V y luego convirtiendo nuevamente a RGB guardando un JPEG en el marco digital. Obviamente, la conversión lleva mucho tiempo, incluso usando itertools
trucos; Logré mejorar las cosas usando psyco
.
Sin embargo, he notado un ejemplo para el PIL Image.convert
donde RGB se puede convertir en XYZ color space utilizando una matriz de 4 × 4 como segundo argumento al método convert
, y llegué a preguntarse:
¿Cómo puedo convertir RGB a HSV (y luego HSV a RGB) usando una matriz personalizada en la llamada al método convert
? (Los errores de redondeo menores no son importantes en este caso, así que no me importa que cada banda se exprese como una serie de 0 ... 255 enteros)
Gracias de antemano.
Nota: es posible que lo que hago también se puede hacer con la función 'ImageOps.autocontrast'; sin embargo, deseo poder expandir el filtro según sea necesario (por ejemplo, quizás darle un poco más de saturación a la saturación), y es por eso que quiero un método rápido para RGB↔HSV). – tzot