sensor_exposure_control.py

# Ce travail est publié sous licence MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Tous droits réservés.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Contrôle de l'exposition du capteur
#
# Cet exemple présente comment contrôler
# manuellement l'exposition du capteur de la caméra plutôt que de laisser le contrôle d'exposition automatique s'exécuter.

# Quelle est la différence entre le contrôle du gain et celui de l'exposition ?
#
# En augmentant le temps d'exposition de l'image, vous obtenez plus de
# lumière sur la caméra. Cela vous donne le meilleur rapport signal/bruit. Vous
# voulez en général toujours augmenter le temps d'exposition... sauf que, lorsque vous
# augmentez le temps d'exposition, vous diminuez la fréquence d'images maximale possible
# et si quelque chose bouge dans l'image, celle-ci commencera à devenir plus floue avec un
# temps d'exposition plus élevé. Le contrôle du gain permet d'augmenter la sortie par
# pixel à l'aide de multiplicateurs analogiques et numériques... cependant, cela amplifie
# également le bruit. Il est donc préférable de laisser l'exposition augmenter autant que possible
# puis d'utiliser le contrôle du gain pour combler le reste.

import csi
import time

# Modifiez cette valeur pour ajuster l'exposition. Essayez 10.0/0.1/etc.
EXPOSURE_TIME_SCALE = 1.0

csi0 = csi.CSI()
csi0.reset()  # Réinitialiser et initialiser le capteur.
csi0.pixformat(csi.RGB565)  # Définir le format de pixel sur RGB565 (ou GRAYSCALE)
csi0.framesize(csi.QVGA)  # Définir la taille de l'image sur QVGA (320x240)

# Affichez le temps d'exposition initial à des fins de comparaison.
print("Initial exposure == %d" % csi0.exposure_us())

csi0.snapshot(time=2000)  # Attendre que les réglages prennent effet.
clock = time.clock()  # Créer un objet horloge pour suivre le FPS.

# Vous devez désactiver le contrôle automatique du gain et de la balance des blancs automatique
# sinon ils modifieront les gains de l'image pour annuler tout réglage d'exposition
# que vous avez mis en place...
csi0.auto_gain(False)
csi0.auto_whitebal(False)
# Il faut laisser le temps aux réglages ci-dessus de prendre effet...
csi0.snapshot(time=500)

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

# Le contrôle d'exposition automatique (AEC) est activé par défaut. Appeler la fonction ci-dessous
# désactive le contrôle d'exposition automatique du capteur. L'argument supplémentaire "exposure_us"
# remplace ensuite la valeur d'exposition automatique une fois l'AEC désactivé.
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() renvoie le temps d'exposition exact du capteur de la caméra
# en microsecondes. Cependant, ce nombre peut être différent de celui qui a été
# demandé, car le code du capteur convertit le temps d'exposition en microsecondes
# en un temps de ligne/pixel/horloge qui ne correspond pas parfaitement aux microsecondes...

# Si vous souhaitez réactiver l'exposition automatique, faites : csi0.auto_exposure(True)
# Notez que le capteur de la caméra modifiera alors le temps d'exposition comme il l'entend.

# En faisant : csi0.auto_exposure(False)
# Désactive simplement la mise à jour de la valeur d'exposition mais ne modifie pas l'exposition
# que le capteur de la caméra a déterminée comme étant bonne.

while True:
    clock.tick()  # Mettre à jour l'horloge FPS.
    img = csi0.snapshot()  # Prendre une photo et renvoyer l'image.
    print(clock.fps())  # Remarque : l'OpenMV Cam tourne environ deux fois moins vite lorsqu'elle est connectée
    # à l'IDE. Le FPS devrait augmenter une fois déconnectée.

results matching ""

    No results matching ""