find_lines.py

# Esta obra está licenciada bajo la licencia MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Todos los derechos reservados.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Ejemplo de detección de líneas
#
# Este ejemplo muestra cómo encontrar líneas en la imagen. Para cada objeto de línea
# encontrado en la imagen se devuelve un objeto de línea que incluye su rotación.

# Nota: La detección de líneas se realiza mediante la transformada de Hough:
# http://en.wikipedia.org/wiki/Hough_transform
# Lea el enlace anterior para más información sobre qué son `theta` y `rho`.

# find_lines() encuentra líneas de longitud infinita. Use find_line_segments() para encontrar líneas no infinitas.

import csi
import time

ENABLE_LENS_CORR = False  # actívelo para obtener líneas más rectas...

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)  # la escala de grises es más rápida
csi0.framesize(csi.QQVGA)
csi0.snapshot(time=2000)

clock = time.clock()

# Todos los objetos de línea tienen un atributo `theta` para obtener su ángulo de rotación en grados.
# Puede filtrar líneas según su ángulo de rotación.

min_degree = 0
max_degree = 179

# Todas las líneas también tienen atributos `x1`, `y1`, `x2` y `y2` para obtener sus puntos finales.
# Los objetos de línea se pueden pasar directamente a `draw_line()`.

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

    # `threshold` controla cuántas líneas se encuentran en la imagen. Solo las líneas con
    # las sumas de magnitud de diferencia de bordes mayores que `threshold` son detectadas...

    # Más sobre `threshold`: cada píxel de la imagen contribuye con un valor de magnitud
    # a una línea. La suma de todas las contribuciones es la magnitud de esa línea. Luego
    # cuando se fusionan líneas, sus magnitudes se suman. Tenga en cuenta que `threshold`
    # filtra las líneas con magnitudes bajas antes de la fusión. Para ver la magnitud de
    # las líneas sin fusionar, establezca `theta_margin` y `rho_margin` en 0...

    # `theta_margin` y `rho_margin` controlan la fusión de líneas similares. Si dos líneas
    # tienen diferencias de valores theta y rho menores que los márgenes, se fusionan.

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

# Sobre los valores negativos de rho:
#
# Una tupla [theta+0:-rho] es igual a [theta+180:+rho].

results matching ""

    No results matching ""