linear_polar_off_center.py
# هذا العمل مرخص بموجب ترخيص MIT.
# حقوق النشر (c) 2013-2026 لشركة OpenMV LLC. جميع الحقوق محفوظة.
# 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() # تتبع عدد الميلي ثانية المنقضية بين استدعاءات snapshot().
img = csi0.snapshot()
cx = (img.width() // 2) + CENTER_X_OFFSET
cy = (img.height() // 2) + CENTER_Y_OFFSET
img.linpolar(reverse=False, x=cx, y=cy)
print(clock.fps()) # ملاحظة: تعمل كاميرا OpenMV الخاصة بك بحوالي نصف السرعة أثناء
# الاتصال بحاسوبك. يجب أن يزداد معدل الإطارات (FPS) بعد قطع الاتصال.