lunedì 21 luglio 2025

Fuoco su Picam HQ

Uno delle maggiori limitazioni della PiCam HQ e' quella di avere il fuoco e l'iride manuali

Per il fuoco ho letto che il valore del laplaciano e' una forma di calcolo della nitidezza dell'immagine. Nell'esempio qui sotto viene effettuato il calcolo realtime del valore del laplaciano e si deve spostare con delicatezza (il ritardo delle immagini e' sensibile) il fuoco fino ad ottenere il valore massimo


 

 

import cv2
import subprocess
import numpy as np

width, height = 640, 480
frame_size = width * height * 3 // 2  # YUV420p format: 1.5 bytes per pixel

cmd = [
    "rpicam-vid",
    "--width", str(width),
    "--height", str(height),
    "--framerate", "30",
    "--codec", "yuv420",
    "-t", "0",
    "--output", "-"
]

proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)

try:
    while True:
        # Leggi il frame
        raw_frame = b''
        while len(raw_frame) < frame_size:
            chunk = proc.stdout.read(frame_size - len(raw_frame))
            if not chunk:
                break
            raw_frame += chunk

        if len(raw_frame) < frame_size:
            break  # Fine stream o errore

        # Converti in matrice YUV420
        yuv = np.frombuffer(raw_frame, dtype=np.uint8).reshape((height * 3 // 2, width))

        # Canale Y per misura di fuoco
        y = yuv[:height, :]

        # Calcola varianza del Laplaciano
        laplacian = cv2.Laplacian(y, cv2.CV_64F)
        variance = laplacian.var()

        # Converti YUV420 a BGR per visualizzazione
        bgr = cv2.cvtColor(yuv, cv2.COLOR_YUV2BGR_I420)

        # Visualizza risultato
        cv2.putText(bgr, f"Fuoco: {variance:.2f}", (10, 30),
                    cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
        cv2.imshow("rpicam HQ", bgr)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

finally:
    proc.terminate()
    cv2.destroyAllWindows()

 

Nessun commento:

Posta un commento

Slideshow Mandelbrot

 Ho trovato a questo indirizzo un file csv in cui sono riportate le coordinate di finestre di zoom per l'insieme di Mandelbrot in zone ...