Ich arbeite in einem Labor und wir machen oft Zeitreihen (Bild jede Stunde) von Stammzellen. Die aktuelle Idee ist, alle Frames zusammen zu stellen und ein Video zu machen, das diese wachsenden Zellen zeigt (ähnlich dieser youtube video). Was mit OpenCV + Python einfach und cool gemacht werden könnte.Helligkeit/Histogramm Normalisierung für Zeitraffer Bilder
import numpy as np
import os
import cv2
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
timelapse_folder = '../myTimeLapse/'
for file in os.listdir(timelapse_folder):
frame = cv2.imread(timelapse_folder+file, 0)
out.write(frame)
out.release()
Aber wir haben das Problem, dass alle Bilder ein wenig in der Helligkeit variieren, so dass wir einige Flackern in unserer Video-Ausgang erhalten.
ich nicht erlaubt bin die Videos hochladen, aber hier sind einige einfache Beispiele mit Gimp erzeugt, um das Problem zu visualisieren:
, dass das Video, das ich aus den Rahmen zu bekommen ist
und das ist mein gewünschtes Video (es wäre auch toll das Flackern zu minimieren statt es komplett zu entfernen)
Gibt es eine Möglichkeit, das Histogramm oder die Helligkeit über alle Bilder (oder vielleicht zwischen zwei Bildern) anzupassen, um das Flackern mit OpenCV zu entfernen?
Danke für jede Idee oder Hinweis!
Edit: Die Sequenz gif von Andrew Idee produziert (Antwort unten)
der Annahme, dass alle Bilder 2D-Arrays von Schwimmern/Ints sind, dann könnten Sie ein 3D-Array aller Bilder konstruieren , und normalisieren Sie dann gegen den hellsten '(max (np.average (arr, axis = 2)))'. Dann trittest du durch und schreibst zu dem Video? – Andrew
Hey Ich versuchte 'max_avg = np.max (np.average (Bilder, Achse = 2))' und dann in einer for-Schleife über jedes Bild 'frame = (frame/max_avg) * 255 ', aber es entfernt nicht das Flackern . Oder meinst du eine andere Art der Normalisierung? – Fabian