find_lines.py

# Ce travail est publié sous licence MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Tous droits réservés.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Exemple de détection de lignes
#
# Cet exemple montre comment détecter des lignes dans l'image. Pour chaque objet ligne
# trouvé dans l'image, un objet ligne est retourné, incluant la rotation de la ligne.

# Remarque : la détection de lignes est effectuée à l'aide de la transformée de Hough :
# http://en.wikipedia.org/wiki/Hough_transform
# Veuillez lire l'article ci-dessus pour en savoir plus sur ce que sont `theta` et `rho`.

# find_lines() détecte des lignes de longueur infinie. Utilisez find_line_segments() pour détecter des lignes non infinies.

import csi
import time

ENABLE_LENS_CORR = False  # activez pour obtenir des lignes plus droites...

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)  # les niveaux de gris sont plus rapides
csi0.framesize(csi.QQVGA)
csi0.snapshot(time=2000)

clock = time.clock()

# Tous les objets ligne possèdent un attribut `theta` permettant d'obtenir leur angle de rotation en degrés.
# Vous pouvez filtrer les lignes en fonction de leur angle de rotation.

min_degree = 0
max_degree = 179

# Toutes les lignes possèdent également des attributs `x1`, `y1`, `x2` et `y2` permettant d'obtenir leurs points d'extrémité.
# Les objets ligne peuvent être transmis directement à `draw_line()`.

while True:
    clock.tick()
    img = csi0.snapshot()
    if ENABLE_LENS_CORR:
        img.lens_corr(1.8)  # pour un objectif de 2.8mm...

    # `threshold` contrôle le nombre de lignes détectées dans l'image. Seules les lignes dont
    # la somme des magnitudes de différence de bord est supérieure à `threshold` sont détectées...

    # Plus de détails sur `threshold` - chaque pixel de l'image contribue une valeur de magnitude
    # à une ligne. La somme de toutes les contributions constitue la magnitude de cette ligne. Ensuite,
    # lorsque des lignes sont fusionnées, leurs magnitudes sont additionnées. Notez que `threshold`
    # filtre les lignes à faible magnitude avant la fusion. Pour voir la magnitude des
    # lignes non fusionnées, définissez `theta_margin` et `rho_margin` à 0...

    # `theta_margin` et `rho_margin` contrôlent la fusion des lignes similaires. Si deux lignes
    # les différences de valeurs theta et rho sont inférieures aux marges, elles sont fusionnées.

    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())

# À propos des valeurs de rho négatives :
#
# Un tuple [theta+0:-rho] est identique à [theta+180:+rho].

results matching ""

    No results matching ""