find_line_segments.py
# Эта работа лицензирована по лицензии MIT.
# Copyright (c) 2013-2023 OpenMV LLC. All rights reserved.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Пример поиска отрезков линий
#
# Этот пример демонстрирует, как находить отрезки линий на изображении. Для каждого объекта линии
# найденного на изображении, возвращается объект линии, который включает угол её поворота.
# find_line_segments() находит линии конечной длины (но работает медленно).
# Используйте find_line_segments() для поиска конечных линий (работает быстро).
import csi
import time
ENABLE_LENS_CORR = False # включите для более прямых линий...
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565) # градации серого работают быстрее
csi0.framesize(csi.QQVGA)
csi0.snapshot(time=2000)
clock = time.clock()
# У всех линий также есть атрибуты `x1`, `y1`, `x2` и `y2` для получения координат их конечных точек.
# Объекты линий можно передавать напрямую в `draw_line()`.
while True:
clock.tick()
img = csi0.snapshot()
if ENABLE_LENS_CORR:
img.lens_corr(1.8) # для объектива 2,8 мм...
# `merge_distance` управляет объединением близких линий. При значении 0 (по умолчанию)
# объединение не выполняется. При значении 1 объединяются любые линии, находящиеся на расстоянии 1 пиксель друг от друга... и так
# далее по мере увеличения этого значения. Возможно, вы захотите объединять линии, так как обнаружение отрезков линий
# даёт большое количество результатов в виде отрезков.
# `max_theta_diff` управляет максимальной разницей углов поворота между
# любыми двумя линиями, которые предстоит объединить. Значение по умолчанию допускает 15 градусов.
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())