find_circles.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 Círculos
#
# Este exemplo mostra como encontrar círculos na imagem usando a Transformada
# de Hough. https://en.wikipedia.org/wiki/Circle_Hough_Transform
#
# Note que o método find_circles() só encontra círculos que estejam completamente
# dentro da imagem. Círculos que saem da imagem/roi são ignorados...
import csi
import time
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()
while True:
clock.tick()
img = csi0.snapshot().lens_corr(1.8)
# Objetos de círculo têm quatro valores: x, y, r (raio) e magnitude. A
# magnitude é a força da detecção do círculo. Quanto maior for,
# melhor...
# `threshold` controla quantos círculos são encontrados. Aumente o valor
# para diminuir o número de círculos detectados...
# `x_margin`, `y_margin` e `r_margin` controlam a mesclagem de círculos
# semelhantes nas direções x, y e r (raio).
# r_min, r_max e r_step controlam quais raios de círculo são testados.
# Reduzir o número de raios de círculo testados gera um grande ganho de desempenho.
for c in img.find_circles(
threshold=2000,
x_margin=10,
y_margin=10,
r_margin=10,
r_min=2,
r_max=100,
r_step=2,
):
img.draw_circle(c, color=(255, 0, 0))
print(c)
print("FPS %f" % clock.fps())