find_circles.py
# この作品はMITライセンスの下で提供されています。
# Copyright (c) 2013-2023 OpenMV LLC. 全著作権所有。
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# 円の検出の例
#
# この例では、ハフ変換を使用して画像内で円を検出する方法を示します。
# 変換。https://en.wikipedia.org/wiki/Circle_Hough_Transform
#
# find_circles() メソッドは、完全に
# 画像内に収まっている円のみを検出することに注意してください。画像/ROI からはみ出す円は無視されます...
import csi
import time
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565) # グレースケールの方が高速です
csi0.framesize(csi.QQVGA)
csi0.snapshot(time=2000)
clock = time.clock()
while True:
clock.tick()
img = csi0.snapshot().lens_corr(1.8)
# 円オブジェクトは x、y、r (半径)、magnitude の 4 つの値を持ちます。
# magnitude は円の検出の強さを表します。値が大きいほど
# 良いことを示します...
# `threshold` は検出される円の数を制御します。その値を増やすと
# 検出される円の数が減少します...
# `x_margin`、`y_margin`、`r_margin` は、x、y、r (半径) 方向における
# 類似した円の結合を制御します。
# r_min、r_max、r_step は、テストされる円の半径の範囲を制御します。
# テストする円の半径の数を減らすと、パフォーマンスが大幅に向上します。
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())