find_lines.py

# Este trabalho está licenciado sob a licença MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Todos os direitos reservados.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Exemplo de Detecção de Linhas
#
# Este exemplo mostra como encontrar linhas na imagem. Para cada linha
# encontrada na imagem, é retornado um objeto de linha que inclui a rotação da linha.

# Nota: a detecção de linhas é feita usando a Transformada de Hough:
# http://en.wikipedia.org/wiki/Hough_transform
# Leia sobre isso no link acima para mais informações sobre o que são `theta` e `rho`.

# find_lines() encontra linhas de comprimento infinito. Use find_line_segments() para encontrar linhas não infinitas.

import csi
import time

ENABLE_LENS_CORR = False  # ative para linhas mais retas...

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)  # escala de cinza é mais rápido
csi0.framesize(csi.QQVGA)
csi0.snapshot(time=2000)

clock = time.clock()

# Todos os objetos de linha têm um atributo `theta` que fornece o ângulo de rotação em graus.
# Você pode filtrar linhas com base no ângulo de rotação.

min_degree = 0
max_degree = 179

# Todas as linhas também têm atributos `x1`, `y1`, `x2` e `y2` que fornecem os pontos finais.
# Objetos de linha podem ser passados diretamente para `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 quantas linhas na imagem são encontradas. Apenas linhas com
    # soma de magnitude de diferença de borda maior que `threshold` são detectadas...

    # Mais sobre `threshold` - cada pixel na imagem contribui com um valor de magnitude
    # para uma linha. A soma de todas as contribuições é a magnitude dessa linha. Depois,
    # quando as linhas são mescladas, suas magnitudes são somadas. Note que `threshold`
    # filtra linhas com magnitudes baixas antes da mesclagem. Para ver a magnitude de
    # linhas não mescladas, defina `theta_margin` e `rho_margin` como 0...

    # `theta_margin` e `rho_margin` controlam a mesclagem de linhas semelhantes. Se as diferenças
    # de valores theta e rho entre duas linhas forem menores que as margens, elas são mescladas.

    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 valores negativos de rho:
#
# Uma tupla [theta+0:-rho] é equivalente a [theta+180:+rho].

results matching ""

    No results matching ""