find_line_segments.py
# この作品はMITライセンスの下で提供されています。
# Copyright (c) 2013-2023 OpenMV LLC. 全著作権所有。
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# 線分の検出の例
#
# この例では、画像内で線分を検出する方法を示します。検出された各ライン
# オブジェクトには、そのラインの回転角度を含むライン情報が返されます。
# find_line_segments() は有限長のラインを検出します(ただし低速です)。
# 非無限長のラインを検出するには find_line_segments() を使用してください(高速です)。
import csi
import time
ENABLE_LENS_CORR = False # より直線的なラインを得るには有効にします...
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565) # グレースケールの方が高速です
csi0.framesize(csi.QQVGA)
csi0.snapshot(time=2000)
clock = time.clock()
# すべてのラインには、端点を取得するための `x1`、`y1`、`x2`、`y2` 属性もあります。
# ライン オブジェクトは `draw_line()` に直接渡すことができます。
while True:
clock.tick()
img = csi0.snapshot()
if ENABLE_LENS_CORR:
img.lens_corr(1.8) # 2.8mm レンズの場合...
# `merge_distance` は近接するラインの結合を制御します。0 (デフォルト) の場合、
# 結合は行われません。1 の場合、他のラインから 1 ピクセル以内にあるラインが結合されます...これは
# この値を増やすほど広がっていきます。線分検出は多数の線分の結果を生成するため、
# ラインを結合したい場合があります。
# `max_theta_diff` は、結合しようとする 2 本のライン間の
# 回転角度の差の最大値を制御します。デフォルト設定では 15 度まで許容されます。
for l in img.find_line_segments(merge_distance=0, max_theta_diff=5):
img.draw_line(l, color=(255, 0, 0))
# print(l)
print("FPS %f" % clock.fps())