Example: 05-Feature-Detection/find_line_segments.py
# 本作品采用MIT许可证授权。
# 版权所有 (c) 2013-2023 OpenMV LLC。保留所有权利。
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# 查找线段示例
#
# 此示例展示了如何在图像中查找线段。对于每个线条对象,
# 将返回包含该直线旋转角度的数据结构。
# find_line_segments() 查找有限长度的线条(但速度较慢)。
# 使用 find_line_segments() 查找非无限长的线条(速度较快)。
import sensor
import time
ENABLE_LENS_CORR = False # 开启以获得更直的线条...
sensor.reset()
sensor.set_pixformat(sensor.RGB565) # 灰度处理速度更快
sensor.set_framesize(sensor.QQVGA)
sensor.skip_frames(time=2000)
clock = time.clock()
# 所有线条还提供`x1()`、`y1()`、`x2()`和`y2()`方法以获取其端点
# 以及`line()`方法将所有上述值作为一个四元组返回,供`draw_line()`使用。
while True:
clock.tick()
img = sensor.snapshot()
if ENABLE_LENS_CORR:
img.lens_corr(1.8) # 适用于2.8mm镜头...
# `merge_distance` 控制附近线条的合并。默认值为 0 时,不进行
# 合并。当值为 1 时,任何距离另一条线 1 像素的线条将被合并... 以此类推,
# 随着该值的增加。您可能希望合并线条,因为线段检测
# 会产生大量线段结果。
# `max_theta_diff` 控制即将合并的两条线之间的最大旋转差异。
# 默认设置允许 15 度的差异。
for l in img.find_line_segments(merge_distance=0, max_theta_diff=5):
img.draw_line(l.line(), color=(255, 0, 0))
# 打印(l)
print("FPS %f" % clock.fps())