sensor_manual_gain_control.py

# Эта работа лицензирована по лицензии MIT.
# Copyright (c) 2013-2023 OpenMV LLC. All rights reserved.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Ручное управление усилением датчика
#
# В этом примере показано, как управлять
# усилением вручную, а не полагаться на работу автоматического управления усилением.

# В чём разница между управлением усилением и экспозицией?
#
# Что ж, увеличивая время экспозиции изображения, вы получаете больше
# света на камере. Это даёт наилучшее отношение сигнал/шум. В целом
# вы всегда хотите увеличивать время экспозиции... за исключением случаев, когда
# увеличение времени экспозиции снижает максимально возможную частоту кадров,
# и если что-то в изображении движется, оно начнёт размываться сильнее при
# более высоком времени экспозиции. Управление усилением позволяет увеличить выходной сигнал на
# пиксель с помощью аналоговых и цифровых множителей... однако это также усиливает
# шум. Поэтому лучше позволить экспозиции увеличиваться как можно больше,
# а затем использовать управление усилением, чтобы компенсировать оставшуюся разницу.

import csi
import time

# Измените это значение, чтобы настроить усиление. Попробуйте 10.0/0/0.1/и т.д.
GAIN_SCALE = 1.0

csi0 = csi.CSI()
csi0.reset()  # Сброс и инициализация датчика.
csi0.pixformat(csi.RGB565)  # Установить формат пикселей RGB565 (или GRAYSCALE)
csi0.framesize(csi.QVGA)  # Установить размер кадра QVGA (320x240)

# Вывести начальное усиление для сравнения.
print("Initial gain == %f db" % csi0.gain_db())

csi0.snapshot(time=2000)  # Подождать, пока настройки вступят в силу.
clock = time.clock()  # Создать объект clock для отслеживания FPS.

# Вам нужно отключить автоматическое управление экспозицией и автоматический баланс белого,
# иначе они изменят экспозицию изображения, отменяя любые настройки усиления
# которые вы установили...
csi0.auto_exposure(False)
csi0.auto_whitebal(False)
# Нужно дать время, чтобы указанные выше настройки вступили в силу...
csi0.snapshot(time=500)

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

# Автоматическое управление усилением (AGC) включено по умолчанию. Вызов функции ниже
# отключает автоматическое управление усилением датчика. Дополнительный аргумент "gain_db"
# затем переопределяет значение автоматического усиления после отключения AGC.
csi0.auto_gain(False, gain_db=current_gain_in_decibels * GAIN_SCALE)

print("New gain == %f db" % csi0.gain_db())
# csi0.gain_db() возвращает точное значение усиления датчика камеры в децибелах.
# Однако это число может отличаться от заданного, потому что
# код датчика преобразует усиление в малое и большое значение усиления, которые
# не могут принимать все возможные значения...

# Если вы хотите снова включить автоматическое усиление, выполните: csi0.auto_gain(True)
# Обратите внимание, что датчик камеры затем будет изменять усиление по своему усмотрению.

# Выполняется: csi0.auto_gain(False)
# Просто отключает обновление значения усиления, но не изменяет само усиление
# экспозиции, которое датчик камеры определил как подходящее.

while True:
    clock.tick()  # Обновить счётчик FPS.
    img = csi0.snapshot()  # Сделать снимок и вернуть изображение.
    print(clock.fps())  # Примечание: OpenMV Cam работает примерно вдвое медленнее при подключении
    # к IDE. FPS должен увеличиться после отключения.

results matching ""

    No results matching ""