log_polar_off_center.py
# Эта работа лицензирована по лицензии MIT.
# Copyright (c) 2013-2026 OpenMV LLC. All rights reserved.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Пример логарифмического полярного отображения со смещённым центром
#
# Этот пример демонстрирует перепроецирование изображения с помощью логарифмического полярного
# преобразования с центром в точке, заданной пользователем, а не в
# центре изображения. Это полезно, когда оптическая ось объектива не
# совпадает с центром датчика (например, объектив типа "рыбий глаз", установленный со
# смещённым адаптером), поэтому полярное преобразование можно перецентрировать относительно
# истинного оптического центра.
#
# Передайте именованные аргументы `x` и `y`, чтобы задать центр полярного преобразования. Оба
# по умолчанию принимают значение центра изображения, если не заданы.
import csi
import time
csi0 = csi.CSI()
csi0.reset() # Инициализация датчика камеры.
csi0.pixformat(csi.RGB565) # или csi.GRAYSCALE
csi0.framesize(csi.QQVGA) # или csi.QVGA (или другие)
csi0.snapshot(time=2000) # Дайте новым настройкам вступить в силу.
# Сместите центр полярного преобразования на 20 пикселей вправо и на 10 пикселей вниз
# от центра датчика. Подберите эти значения под ваш объектив.
CENTER_X_OFFSET = 20
CENTER_Y_OFFSET = 10
clock = time.clock() # Отслеживает FPS.
while True:
clock.tick() # Отслеживание количества миллисекунд, прошедших между snapshots().
img = csi0.snapshot()
cx = (img.width() // 2) + CENTER_X_OFFSET
cy = (img.height() // 2) + CENTER_Y_OFFSET
img.logpolar(reverse=False, x=cx, y=cy)
print(clock.fps()) # Примечание: ваша камера OpenMV Cam работает примерно вдвое медленнее, пока
# подключена к компьютеру. После отключения частота кадров должна увеличиться.