find_lines.py

# Эта работа лицензирована по лицензии MIT.
# Copyright (c) 2013-2023 OpenMV LLC. All rights reserved.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Пример поиска линий
#
# Этот пример демонстрирует, как находить линии на изображении. Для каждого объекта линии,
# найденного на изображении, возвращается объект линии, который включает угол её поворота.

# Примечание: обнаружение линий выполняется с помощью преобразования Хафа:
# http://en.wikipedia.org/wiki/Hough_transform
# Пожалуйста, прочитайте об этом по ссылке выше, чтобы узнать подробнее о том, что такое `theta` и `rho`.

# find_lines() находит линии бесконечной длины. Используйте 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()

# У всех объектов линий есть атрибут `theta` для получения угла поворота в градусах.
# Вы можете фильтровать линии по углу их поворота.

min_degree = 0
max_degree = 179

# У всех линий также есть атрибуты `x1`, `y1`, `x2` и `y2` для получения координат их конечных точек.
# Объекты линий можно передавать напрямую в `draw_line()`.

while True:
    clock.tick()
    img = csi0.snapshot()
    if ENABLE_LENS_CORR:
        img.lens_corr(1.8)  # для объектива 2,8 мм...

    # `threshold` управляет количеством найденных на изображении линий. Обнаруживаются только линии с
    # суммой величин разности краёв больше `threshold`...

    # Подробнее о `threshold` — каждый пиксель изображения вносит значение величины
    # в линию. Сумма всех вкладов — это величина для данной линии. Затем,
    # при объединении линий их величины складываются. Обратите внимание, что `threshold`
    # отфильтровывает линии с низкими величинами перед объединением. Чтобы увидеть величину
    # необъединённых линий, установите `theta_margin` и `rho_margin` в 0...

    # `theta_margin` и `rho_margin` управляют объединением похожих линий. Если разница значений theta и rho
    # двух линий меньше заданных допусков, они объединяются.

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

# Об отрицательных значениях rho:
#
# Кортеж [theta+0:-rho] эквивалентен [theta+180:+rho].

results matching ""

    No results matching ""