find_line_segments.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: Liniensegmente finden
#
# Dieses Beispiel zeigt, wie man Liniensegmente im Bild findet. Für jedes Linienobjekt
# im Bild wird ein Linienobjekt zurückgegeben, das die Rotation der Linie enthält.
# find_line_segments() findet Linien endlicher Länge (ist jedoch langsam).
# Verwenden Sie find_line_segments(), um nicht-unendliche Linien zu finden (und das schnell).
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 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 ...
# `merge_distance` steuert das Zusammenführen nahe beieinanderliegender Linien. Bei 0 (Standard) findet
# kein Zusammenführen statt. Bei 1 wird jede Linie, die 1 Pixel von einer anderen entfernt ist, zusammengeführt ... und so
# weiter, je höher Sie diesen Wert setzen. Es kann sinnvoll sein, Linien zusammenzuführen, da die Liniensegment-
# erkennung eine große Anzahl an Liniensegment-Ergebnissen liefert.
# `max_theta_diff` steuert die maximale Rotationsdifferenz zwischen
# zwei Linien, die zusammengeführt werden sollen. Die Standardeinstellung erlaubt 15 Grad.
for l in img.find_line_segments(merge_distance=0, max_theta_diff=5):
img.draw_line(l, color=(255, 0, 0))
# print(l)
print("FPS %f" % clock.fps())