Wie schnell ändern Sie die Bildhelligkeit mit python + OpenCV?
Ich habe eine Sequenz von Bildern. Ich brauche, um die Durchschnittliche Helligkeit dieser Bilder.
Ersten Beispiel (sehr langsam):
img = cv2.imread('test.jpg') #load rgb image
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) #convert it to hsv
for x in range(0, len(hsv)):
for y in range(0, len(hsv[0])):
hsv[x, y][2] += value
img = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
cv2.imwrite("image_processed.jpg", img)
Zweiten Beispiel (schnell)
hsv += value
Diesem Beispiel sehr schnell, aber es ändert alle Werte, die der HSV (ich brauche eine änderung nur V (Helligkeit))
Du musst angemeldet sein, um einen Kommentar abzugeben.
Slice
wählen Sie nur den Dritten Kanal, und ändern Sie dann die Elemente -numpy.clip
. Auch, nur eine Erinnerung, dass diese arbeiten auf der HSV-Seite. Also, Sie tun müssen, würde diese RGB zu HSV und zurück Konvertierungen.This
sollte helfen. Zum einstellen des Grenzwertes, möchten Sie vielleicht zu Lesen, aufHSV Wiki
.V channel
Werte sind weniger dievalue
. Schon versuchtIch weiß, diese Frage ist ein bisschen alt, aber ich dachte, ich könnte die post die komplette Lösung, die für mich gearbeitet (kümmert sich um den überlauf situation, indem Sie die Sättigung auf 255):
Diese können wie folgt verwendet werden:
Iterieren über das gesamte Bild, um änderungen vorzunehmen ist nicht sehr skalierbar option in opencv, Opencv bietet viele Methoden und Funktionen zur Durchführung der arithmetischen Operationen auf dem gegebenen Bild.
Können Sie einfach teilen Sie die konvertierte HSV-Bild in die einzelnen Kanäle und dann den V-Kanal entsprechend als:
Den anderen Antworten schlagen Sie die " Sättigung "von hand" mit allen Arten von numpy Magie, aber Sie können auch verwenden, cv2.add() und lassen Sie OpenCV-handle, das für Sie:
Hoffe, dies ist nützlich für jemanden, der
@Divakar Antwort Python, OpenCV: Erhöhung der Bildhelligkeit ohne überzulaufen UINT8-array
Um die Helligkeit zu verringern
Hier alpha & beta sind Eingabeparameter. Jedes pixel des eingangsbildes wird sich ändern nach dieser Formel.
Niedrigeren Wert von alpha wie 2 oder 3 ist gut
Vielleicht zu alt, aber ich benutze cv.covertTo, die für mich funktioniert
convertTo verwendet saturate_cast am Ende zu vermeiden, irgendwelche overflows. Ich glaube nicht, verwenden Python und die oben ist in C++, aber ich hoffe, es ist leicht umwandelbar in Python und hoffe es hilft
Können Sie mit dieser Funktion ändern Sie Ihren gewünschten Helligkeit oder Kontrast mithilfe von C++ genau wie die gleiche Weise tun Sie es auf photoshop oder andere ähnliche Foto-Bearbeitungs-software.
Danach müssen Sie zum aufrufen der Funktionen durch die Schaffung trackbar mit
cv2.createTrackbar()
und rufen Sie die oben genannten Funktionen mit den richtigen Parametern als gut. Um die Zuordnung der Helligkeitswerte, die reicht von -255 bis +255 und Kontrast-Werte -127 bis +127, die Sie verwenden können, dassmap()
Funktion. Sie können überprüfen Sie die gesamte details über python-Implementierung hier.Ich weiß, das sollte nicht so schwer sein und es zum anpassen der Helligkeit eines Bildes. Auch gibt es bereits viele gute Antworten. Ich möchte zu verbessern die Antwort von @BillGrates, so dass es funktioniert auf Graustufenbilder und mit Abnehmender Helligkeit:
value = -255
erzeugt ein Schwarzes Bild in der Erwägung, dassvalue = 255
eine weiße.