find_lines.py

# Dieses Werk ist unter der MIT-Lizenz lizenziert.
# Copyright (c) 2013-2023 OpenMV LLC. Alle Rechte vorbehalten.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Beispiel: Linien finden
#
# Dieses Beispiel zeigt, wie man Linien im Bild findet. Für jedes gefundene Linienobjekt
# im Bild wird ein Linienobjekt zurückgegeben, das die Rotation der Linie enthält.

# Hinweis: Die Linienerkennung erfolgt mittels der Hough-Transformation:
# http://en.wikipedia.org/wiki/Hough_transform
# Bitte lesen Sie den obigen Link für weitere Informationen darüber, was `theta` und `rho` sind.

# find_lines() findet Linien unendlicher Länge. Verwenden Sie find_line_segments(), um nicht-unendliche Linien zu finden.

import csi
import time

ENABLE_LENS_CORR = False  # aktivieren für geradere Linien ...

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)  # Graustufen ist schneller
csi0.framesize(csi.QQVGA)
csi0.snapshot(time=2000)

clock = time.clock()

# Alle Linienobjekte besitzen ein Attribut `theta`, um ihren Rotationswinkel in Grad zu erhalten.
# Sie können Linien anhand ihres Rotationswinkels filtern.

min_degree = 0
max_degree = 179

# Alle Linien besitzen außerdem die Attribute `x1`, `y1`, `x2` und `y2`, um ihre Endpunkte zu erhalten.
# Linienobjekte können direkt an `draw_line()` übergeben werden.

while True:
    clock.tick()
    img = csi0.snapshot()
    if ENABLE_LENS_CORR:
        img.lens_corr(1.8)  # für ein 2,8-mm-Objektiv ...

    # `threshold` steuert, wie viele Linien im Bild gefunden werden. Nur Linien mit
    # einer Summe der Kantendifferenz-Beträge größer als `threshold` werden erkannt ...

    # Mehr zu `threshold` - jedes Pixel im Bild trägt einen Betragswert bei
    # zu einer Linie. Die Summe aller Beiträge ist der Betrag (Magnitude) dieser Linie. Wenn
    # Linien zusammengeführt werden, werden ihre Beträge addiert. Beachten Sie, dass `threshold`
    # Linien mit niedrigem Betrag vor dem Zusammenführen herausfiltert. Um den Betrag von
    # nicht zusammengeführten Linien zu sehen, setzen Sie `theta_margin` und `rho_margin` auf 0 ...

    # `theta_margin` und `rho_margin` steuern das Zusammenführen ähnlicher Linien. Wenn sich die
    # Differenzen der theta- und rho-Werte zweier Linien innerhalb der Margen befinden, werden sie zusammengeführt.

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

# Zu negativen rho-Werten:
#
# Ein [theta+0:-rho]-Tupel ist dasselbe wie [theta+180:+rho].

results matching ""

    No results matching ""