find_lines.py

# Questo lavoro è concesso in licenza MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Tutti i diritti riservati.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Esempio di ricerca delle linee
#
# Questo esempio mostra come trovare le linee nell'immagine. Per ogni oggetto linea
# trovato nell'immagine viene restituito un oggetto linea che include la rotazione della linea.

# Nota: il rilevamento delle linee viene eseguito utilizzando la trasformata di Hough:
# http://en.wikipedia.org/wiki/Hough_transform
# Leggere il link sopra per maggiori informazioni su cosa sono `theta` e `rho`.

# find_lines() trova linee di lunghezza infinita. Usare find_line_segments() per trovare linee non infinite.

import csi
import time

ENABLE_LENS_CORR = False  # attivare per linee più dritte...

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)  # la scala di grigi è più veloce
csi0.framesize(csi.QQVGA)
csi0.snapshot(time=2000)

clock = time.clock()

# Tutti gli oggetti linea hanno un attributo `theta` per ottenere il loro angolo di rotazione in gradi.
# È possibile filtrare le linee in base al loro angolo di rotazione.

min_degree = 0
max_degree = 179

# Tutte le linee hanno anche gli attributi `x1`, `y1`, `x2` e `y2` per ottenere i loro punti finali.
# Gli oggetti linea possono essere passati direttamente a `draw_line()`.

while True:
    clock.tick()
    img = csi0.snapshot()
    if ENABLE_LENS_CORR:
        img.lens_corr(1.8)  # per obiettivo da 2,8 mm...

    # `threshold` controlla quante linee vengono trovate nell'immagine. Vengono rilevate solo le linee con
    # somme di magnitudo della differenza dei bordi maggiori di `threshold`...

    # Ulteriori informazioni su `threshold`: ogni pixel dell'immagine contribuisce con un valore di magnitudo
    # a una linea. La somma di tutti i contributi è la magnitudo di quella linea. Poi,
    # quando le linee vengono unite, le loro magnitudo vengono sommate. Notare che `threshold`
    # filtra le linee con magnitudo basse prima dell'unione. Per vedere la magnitudo delle
    # linee non unite, impostare `theta_margin` e `rho_margin` a 0...

    # `theta_margin` e `rho_margin` controllano l'unione delle linee simili. Se due linee
    # hanno differenze di valori theta e rho inferiori ai margini, vengono unite.

    for l in img.find_lines(threshold=1000, theta_margin=25, rho_margin=25):
        if (min_degree <= l.theta) and (l.theta <= max_degree):
            img.draw_line(l, color=(255, 0, 0))
            # print(l)

    print("FPS %f" % clock.fps())

# Informazioni sui valori rho negativi:
#
# Una tupla [theta+0:-rho] è la stessa cosa di [theta+180:+rho].

results matching ""

    No results matching ""