sensor_exposure_control.py
# Dieses Werk ist unter der MIT-Lizenz lizenziert.
# Copyright (c) 2013-2023 OpenMV LLC. Alle Rechte vorbehalten.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Sensor-Belichtungssteuerung
#
# Dieses Beispiel zeigt, wie sich die
# Belichtung des Kamerasensors manuell steuern lässt, im Gegensatz zur automatischen Belichtungssteuerung.
# Was ist der Unterschied zwischen Gain- und Belichtungssteuerung?
#
# Nun, durch Erhöhen der Belichtungszeit für das Bild erhalten Sie mehr
# Licht auf der Kamera. Dies liefert das beste Signal-Rausch-Verhältnis. Sie
# möchten die Belichtungszeit im Allgemeinen immer erhöhen ... außer wenn Sie
# die Belichtungszeit erhöhen, verringern Sie die maximal mögliche Bildrate,
# und wenn sich etwas im Bild bewegt, wird es bei einer
# höheren Belichtungszeit stärker verwischt. Die Gain-Steuerung ermöglicht es, die Ausgabe pro
# Pixel mithilfe analoger und digitaler Multiplikatoren zu erhöhen ... dies verstärkt jedoch auch
# das Rauschen. Daher ist es am besten, die Belichtung so weit wie möglich zu erhöhen
# und anschließend die Gain-Steuerung zu verwenden, um den restlichen Unterschied auszugleichen.
import csi
import time
# Ändern Sie diesen Wert, um die Belichtung anzupassen. Probieren Sie 10.0/0.1/usw.
EXPOSURE_TIME_SCALE = 1.0
csi0 = csi.CSI()
csi0.reset() # Sensor zurücksetzen und initialisieren.
csi0.pixformat(csi.RGB565) # Pixelformat auf RGB565 (oder GRAYSCALE) setzen
csi0.framesize(csi.QVGA) # Framegröße auf QVGA (320x240) setzen
# Gibt die anfängliche Belichtungszeit zum Vergleich aus.
print("Initial exposure == %d" % csi0.exposure_us())
csi0.snapshot(time=2000) # Warten, bis die Einstellungen wirksam werden.
clock = time.clock() # Ein Clock-Objekt erstellen, um die FPS zu verfolgen.
# Sie müssen die automatische Gain-Steuerung und den automatischen Weißabgleich deaktivieren,
# da diese sonst die Bild-Gains ändern und damit alle Belichtungseinstellungen rückgängig machen,
# die Sie vorgenommen haben ...
csi0.auto_gain(False)
csi0.auto_whitebal(False)
# Die obigen Einstellungen müssen erst wirksam werden ...
csi0.snapshot(time=500)
current_exposure_time_in_microseconds = csi0.exposure_us()
print("Current Exposure == %d" % current_exposure_time_in_microseconds)
# Die automatische Belichtungssteuerung (AEC) ist standardmäßig aktiviert. Der Aufruf der folgenden Funktion
# deaktiviert die automatische Belichtungssteuerung des Sensors. Das zusätzliche Argument "exposure_us"
# überschreibt dann den automatischen Belichtungswert, nachdem AEC deaktiviert wurde.
csi0.auto_exposure(
False, exposure_us=int(current_exposure_time_in_microseconds * EXPOSURE_TIME_SCALE)
)
print("New exposure == %d" % csi0.exposure_us())
# csi0.exposure_us() gibt die genaue Belichtungszeit des Kamerasensors
# in Mikrosekunden zurück. Dies kann jedoch ein anderer Wert sein als der
# angeforderte, da der Sensorcode die Belichtungszeit in Mikrosekunden
# in eine Zeile-/Pixel-/Taktzeit umrechnet, die nicht exakt mit Mikrosekunden übereinstimmt ...
# Wenn Sie die automatische Belichtung wieder einschalten möchten, führen Sie aus: csi0.auto_exposure(True)
# Beachten Sie, dass der Kamerasensor die Belichtungszeit dann nach eigenem Ermessen ändert.
# Der Aufruf von: csi0.auto_exposure(False)
# deaktiviert lediglich die Aktualisierung des Belichtungswerts, ändert jedoch nicht den Belichtungswert,
# den der Kamerasensor als geeignet ermittelt hat.
while True:
clock.tick() # Aktualisiert die FPS-Uhr.
img = csi0.snapshot() # Nimmt ein Bild auf und gibt es zurück.
print(clock.fps()) # Hinweis: Die OpenMV Cam läuft etwa halb so schnell, wenn sie
# mit der IDE verbunden ist. Die FPS sollten sich nach dem Trennen erhöhen.