find_circles.py
# Ce travail est publié sous licence MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Tous droits réservés.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Exemple de détection de cercles
#
# Cet exemple montre comment détecter des cercles dans l'image à l'aide de la transformée
# de Hough. https://en.wikipedia.org/wiki/Circle_Hough_Transform
#
# Notez que la méthode find_circles() ne trouvera que les cercles entièrement
# à l'intérieur de l'image. Les cercles qui débordent de l'image/ROI sont ignorés...
import csi
import time
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565) # les niveaux de gris sont plus rapides
csi0.framesize(csi.QQVGA)
csi0.snapshot(time=2000)
clock = time.clock()
while True:
clock.tick()
img = csi0.snapshot().lens_corr(1.8)
# Les objets Circle ont quatre valeurs : x, y, r (rayon) et magnitude. La
# magnitude est la force de la détection du cercle. Plus elle est élevée,
# meilleure elle est...
# `threshold` contrôle le nombre de cercles trouvés. Augmentez sa valeur
# pour diminuer le nombre de cercles détectés...
# `x_margin`, `y_margin` et `r_margin` contrôlent la fusion des cercles
# similaires dans les directions x, y et r (rayon).
# r_min, r_max et r_step contrôlent quels rayons de cercles sont testés.
# Réduire le nombre de rayons de cercles testés apporte un gain de performance important.
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())