Ich versuche, die Verbesserung einiger Bilder zu automatisieren, die zu einem digitalen Rahmen übertragen werden sollen. Ich habe einen Code an Ort und Stelle, der die Größe ändert, ein Datum/eine Zeit zu der am wenigsten signifikanten Ecke des Bildes hinzufügt und Paare von Portraitbildern aneinanderfügt, um zu vermeiden, dass ein einzelnes Portrait auf dem 41:20 Bildschirm mit niedriger Auflösung angezeigt wird.RGB zu HSV Konvertierung mit PIL
Ich habe einen Helligkeits-Stretching-Filter für jene Bilder implementiert, bei denen die Beleuchtung nicht so gut war, mit der colorsys.rgb_to_hsv
-Funktion, um H-, S-, V-Bänder zu berechnen, die auf der V-Eins arbeiten und dann wieder zurück in RGB konvertieren Speichern eines JPEG im digitalen Rahmen. Offensichtlich dauert die Konvertierung viel Zeit, selbst mit itertools
Tricks; Ich habe es geschafft, Dinge mit psyco
zu verbessern.
Allerdings habe ich ein Beispiel für die PIL Image.convert
wo RGB zu XYZ color space umgewandelt werden kann eine 4 × 4-Matrix als zweites Argument an die convert
Methode, und ich habe zu fragen:
Wie kann ich konvertieren RGB zu HSV (und dann HSV zurück zu RGB) mit einer benutzerdefinierten Matrix in der Methode convert
Aufruf? (Kleine Rundungsfehler sind in diesem Fall nicht wichtig, deshalb stört es mich nicht, dass jedes Band als eine Reihe von 0 ... 255 ganzen Zahlen ausgedrückt wird)
Vielen Dank im Voraus.
Hinweis: Es ist möglich, dass das, was ich mache, auch mit der Funktion 'ImageOps.autocontrast' erledigt werden kann; Ich möchte jedoch in der Lage sein, den Filter nach Bedarf zu erweitern (z. B. um die Sättigung etwas aufzupeppen), und deshalb möchte ich eine schnelle Methode für RGB ↔HSV). – tzot