sensor_exposure_control.py

# Questo lavoro è concesso in licenza MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Tutti i diritti riservati.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Controllo dell'esposizione del sensore
#
# Questo esempio mostra come controllare il sensore della fotocamera
# manualmente l'esposizione rispetto a lasciare che il controllo automatico dell'esposizione la gestisca.

# Qual è la differenza tra il controllo del guadagno e quello dell'esposizione?
#
# Aumentando il tempo di esposizione dell'immagine si ottiene più
# luce sulla fotocamera. Questo garantisce il miglior rapporto segnale/rumore. In
# generale si vuole sempre aumentare il tempo di esposizione... tranne quando
# aumentando il tempo di esposizione si riduce il framerate massimo possibile
# e se qualcosa si muove nell'immagine inizierà a sfocarsi maggiormente con un
# tempo di esposizione più alto. Il controllo del guadagno consente di aumentare l'output per
# pixel usando moltiplicatori analogici e digitali... tuttavia amplifica anche il
# rumore. Quindi è meglio lasciare che l'esposizione aumenti il più possibile
# e poi usare il controllo del guadagno per recuperare il resto.

import csi
import time

# Modifica questo valore per regolare l'esposizione. Prova 10.0/0.1/ecc.
EXPOSURE_TIME_SCALE = 1.0

csi0 = csi.CSI()
csi0.reset()  # Resetta e inizializza il sensore.
csi0.pixformat(csi.RGB565)  # Imposta il formato pixel su RGB565 (o GRAYSCALE)
csi0.framesize(csi.QVGA)  # Imposta la dimensione del fotogramma su QVGA (320x240)

# Stampa il tempo di esposizione iniziale per confronto.
print("Initial exposure == %d" % csi0.exposure_us())

csi0.snapshot(time=2000)  # Attendi che le impostazioni abbiano effetto.
clock = time.clock()  # Crea un oggetto clock per tracciare gli FPS.

# È necessario disattivare il controllo automatico del guadagno e il bilanciamento automatico del bianco
# altrimenti modificheranno i guadagni dell'immagine annullando qualsiasi impostazione di esposizione
# che è stata configurata...
csi0.auto_gain(False)
csi0.auto_whitebal(False)
# È necessario lasciare che le impostazioni sopra abbiano effetto...
csi0.snapshot(time=500)

current_exposure_time_in_microseconds = csi0.exposure_us()
print("Current Exposure == %d" % current_exposure_time_in_microseconds)

# Il controllo automatico dell'esposizione (AEC) è abilitato per impostazione predefinita. Chiamando la funzione sottostante
# si disabilita il controllo automatico dell'esposizione del sensore. L'argomento aggiuntivo "exposure_us"
# sovrascrive quindi il valore di esposizione automatica dopo che l'AEC è stato disabilitato.
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() restituisce il tempo di esposizione esatto del sensore della fotocamera
# in microsecondi. Tuttavia questo numero potrebbe essere diverso da quello
# impostato, perché il codice del sensore converte il tempo di esposizione in microsecondi
# in un tempo di riga/pixel/clock che non corrisponde perfettamente ai microsecondi...

# Se si desidera riattivare l'esposizione automatica: csi0.auto_exposure(True)
# Nota che il sensore della fotocamera modificherà quindi il tempo di esposizione come preferisce.

# Eseguendo: csi0.auto_exposure(False)
# Disabilita semplicemente l'aggiornamento del valore di esposizione, ma non modifica l'esposizione
# il valore che il sensore della fotocamera ha determinato essere corretto.

while True:
    clock.tick()  # Aggiorna il clock degli FPS.
    img = csi0.snapshot()  # Scatta una foto e restituisce l'immagine.
    print(clock.fps())  # Nota: OpenMV Cam funziona a circa metà velocità quando è connessa
    # all'IDE. Gli FPS dovrebbero aumentare una volta disconnessa.

results matching ""

    No results matching ""