(İmaj kredisi: Tom’un Donanımı)
HDR (Yüksek Dinamik Aralık) görüntüleri kolayca yakalanabilir. libcamera . Komutu çalıştırdığımızda sadece –hdr argümanını iletmemiz gerekiyor. Ancak Picamera2 için Python kodumuzu çalıştırmadan önce bir terminal komutu çalıştırmamız gerekiyor.
HDR, görüntülerin dinamik parlaklık aralığını artırır. HDR ile daha derin karanlık ve daha parlak görüntüler elde ediyoruz. Bu, her biri farklı pozlamalara sahip aynı sahnenin birden fazla görüntüsünü yakalayarak çalışır. Bu görüntüler daha sonra tüm aralığı kapsayan tek bir görüntüde birleştirilir. Kamera Modülü 3, HDR görüntüleri yakalayabilir ancak tam 12 MP çözünürlükte yakalayamaz. Bunun yerine 2304 x 1296 piksel çözünürlüğe sahip 3MP bir görüntü elde ediyoruz.
Testimiz için kodu yeniden kullanacağız. AfFastFocus.py Proje, bir dizi HDR görüntüsü yakalamak için. Kullanıcı etkileşimi olmadan HDR ayarını açıp kapatan bir terminal komutunu çalıştırmak için Python’un OS kitaplığını da kullanacağız. Bu, HDR ayarlarını açıp kapatmayı unutmayacağımız anlamına gelir.
1. HDRAfFastFocus.py adlı yeni bir dosya oluşturun.
2. Picamera2’yi içe aktarın.
from picamera2 import Picamera2
3. libcamera’nın kontrol sınıfını içe aktarın. Bununla kamerayı gereksinimlerimize uyacak şekilde yapılandırabiliriz.
from libcamera import controls
4. İşletim sistemi modülünü içe aktarın . Bu, kodumuzun temel işletim sistemiyle, bu durumda Raspberry Pi OS (Linux) ile etkileşime girmesini sağlar.
import os
5. Bir nesne oluşturun, picam2 kod ile kameramız arasında bir bağlantı olarak kullanacağımız.
picam2 = Picamera2()
6. Kamerayı HDR kullanacak şekilde ayarlamak için os modülündeki sistem işlevini kullanın. Picamera2, HDR’yi destekler, ancak doğrudan modülde desteklemez. Sorun, kamera ile Linux video sistemi arasındaki çekirdek arayüzü olan V4L2 ile ilgilidir. Şu anda, bu kamerayla HDR için hazır destek sunmuyor, bu nedenle onu Picamera2’de kullanılabilir hale getirmek için bu hızlı geçici çözümü çalıştırmamız gerekiyor.
7. Python Kabuğuna bir mesaj yazdırın bize HDR’nin açık olduğunu bildiriyor.
print("Setting HDR to ON")
8. Bir önizleme penceresi başlatın. Ön izleme, kameranın çıktısını gördüğümüz yerdir.
picam2.start(show_preview=True)
9. Otomatik odak modunu Sürekli olarak ayarlayın ve AfSpeed’i Hızlı olarak ayarlayın .
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous, "AfSpeed": controls.AfSpeedEnum.Fast)
10. Kamerayı, her çekim arasında bir saniye gecikme olacak şekilde üç dosya çekecek şekilde ayarlayın. “HDRfastfocus.jpg dosya adı, her dosyaya 0, ardından 1 ve 2 ekler. Bize sayısal sırayla üç dosya veriyor. Kameraya önceki görüntüyü kaydetmesi ve ardından odağı bir sonraki görüntüye ayarlaması için zaman vermek amacıyla her çekim arasındaki gecikmeyi iki katına çıkarırız. 0,5 gecikmeyle test ettik ve çekimlerimiz bazen biraz fazla bulanıktı.
picam2.start_and_capture_files("HDRfastfocus:d.jpg", num_files=3, delay=1)
11. Önizleme penceresini kapatın.
picam2.stop_preview()
12. Kamera bağlantısını kapatın.
picam2.stop()
13. Kullanıcıya bir mesaj yazdır HDR’nin artık kapalı olduğunu ve ardından os.system’i kullanarak komutu çalıştırın.
print("Setting HDR to OFF")
os.system("v4l2-ctl --set-ctrl wide_dynamic_range=0 -d /dev/v4l-subdev0")
14. Kodu kaydedin ve çalıştırın. Bir nesneyi kameraya üç farklı mesafede tutun ve odak değiştikçe izleyin, kamera çekim yaparken ön izleme penceresi donar ve sonraki çekim için serbest kalır. Üç çekim yapıldığında önizleme penceresi kapanacaktır.
resim 1 ile ilgili 3
(İmaj kredisi: Tom’un Donanımı)
(İmaj kredisi: Tom’un Donanımı)
(İmaj kredisi: Tom’un Donanımı)
Eksiksiz Kod Listesi
from picamera2 import Picamera2
from libcamera import controls
import os
picam2 = Picamera2()
os.system("v4l2-ctl --set-ctrl wide_dynamic_range=1 -d /dev/v4l-subdev0")
print("Setting HDR to ON")
picam2.start(show_preview=True)
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous, "AfSpeed": controls.AfSpeedEnum.Fast)
picam2.start_and_capture_files("HDRfastfocus:d.jpg", num_files=3, delay=1)
picam2.stop_preview()
picam2.stop()
print("Setting HDR to OFF")
os.system("v4l2-ctl --set-ctrl wide_dynamic_range=0 -d /dev/v4l-subdev0")
Popular Articles
Latest Articles