sensor_manual_gain_control.py

# Este trabalho está licenciado sob a licença MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Todos os direitos reservados.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Controle Manual de Ganho do Sensor
#
# Este exemplo demonstra como controlar o
# ganho manualmente em vez de deixar o controle automático de ganho atuar.

# Qual é a diferença entre controle de ganho e controle de exposição?
#
# Bem, ao aumentar o tempo de exposição da imagem, você recebe mais
# luz na câmera. Isso oferece a melhor relação sinal-ruído. Você
# geralmente sempre quer aumentar o tempo de exposição... exceto que, quando você
# aumenta o tempo de exposição, diminui a taxa de quadros máxima possível
# e se algo se move na imagem, ele começará a borrar mais com um
# tempo de exposição maior. O controle de ganho permite aumentar a saída por
# pixel usando multiplicadores analógicos e digitais... no entanto, também amplifica
# o ruído. Portanto, é melhor deixar a exposição aumentar o máximo possível
# e depois usar o controle de ganho para compensar o restante.

import csi
import time

# Altere este valor para ajustar o ganho. Tente 10.0/0/0.1/etc.
GAIN_SCALE = 1.0

csi0 = csi.CSI()
csi0.reset()  # Reinicia e inicializa o sensor.
csi0.pixformat(csi.RGB565)  # Define o formato de pixel para RGB565 (ou GRAYSCALE)
csi0.framesize(csi.QVGA)  # Define o tamanho do frame para QVGA (320x240)

# Imprime o ganho inicial para comparação.
print("Initial gain == %f db" % csi0.gain_db())

csi0.snapshot(time=2000)  # Aguarda as configurações fazerem efeito.
clock = time.clock()  # Cria um objeto clock para rastrear o FPS.

# Você precisa desativar o controle automático de exposição e o balanço de branco automático,
# caso contrário eles alterarão a exposição da imagem, desfazendo quaisquer configurações de ganho
# que você definir...
csi0.auto_exposure(False)
csi0.auto_whitebal(False)
# É necessário aguardar as configurações acima entrarem em efeito...
csi0.snapshot(time=500)

current_gain_in_decibels = csi0.gain_db()
print("Current Gain == %f db" % current_gain_in_decibels)

# O controle automático de ganho (AGC) está ativado por padrão. Chamar a função abaixo
# desativa o controle automático de ganho do sensor. O argumento adicional "gain_db"
# então sobrepõe o valor de ganho automático após o AGC ser desativado.
csi0.auto_gain(False, gain_db=current_gain_in_decibels * GAIN_SCALE)

print("New gain == %f db" % csi0.gain_db())
# csi0.gain_db() retorna o ganho exato do sensor da câmera em decibéis.
# No entanto, isso pode ser um número diferente do comandado, porque
# o código do sensor converte o ganho em um valor de ganho pequeno e grande, que
# não conseguem aceitar todos os valores possíveis...

# Se você quiser reativar o ganho automático, faça: csi0.auto_gain(True)
# Note que o sensor da câmera então alterará o ganho como quiser.

# Fazendo: csi0.auto_gain(False)
# Apenas desativa a atualização do valor de ganho, mas não altera o ganho
# valor de exposição que o sensor da câmera determinou ser adequado.

while True:
    clock.tick()  # Atualiza o clock de FPS.
    img = csi0.snapshot()  # Tira uma foto e retorna a imagem.
    print(clock.fps())  # NOTA: A OpenMV Cam roda cerca de metade da velocidade quando conectada
    # ao IDE. O FPS deve aumentar assim que desconectada.

results matching ""

    No results matching ""