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].