You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenMV Cam H7运行Micropython时在for循环内加if过滤线段问题求助

OpenMV Cam H7 线段识别过滤问题解决

1. 首要问题:代码缩进错误

你当前提供的代码中,for循环遍历线段、FPS打印的代码完全没有缩进进while(True)循环块内,程序只会在初始化后执行一次线段检测,后续循环不会运行你的识别和过滤逻辑,这是绝大多数条件不生效的核心原因,请先修正缩进结构。

2. 线段属性的正确调用方式

OpenMV返回的线段对象的所有参数都是通过方法调用获取,不是直接访问属性名:

  • 长度获取:调用l.length(),而非直接写l.length
  • 角度获取:调用l.theta(),而非直接写l.theta
    如果直接访问属性名会拿到无效值,导致判断条件永远不触发。

3. 过滤逻辑示例

以下是修正缩进、添加长度过滤逻辑的完整代码,你可以根据自己的实际场景调整长度阈值、添加角度、位置等其他过滤条件:

enable_lens_corr = False # 开启后可以修正镜头畸变让线条更直

import sensor, image, time

sensor.reset()
sensor.set_pixformat(sensor.RGB565) # 用灰度格式可以提升运行速度
sensor.set_framesize(sensor.QQVGA)
sensor.skip_frames(time = 2000)
clock = time.clock()

while(True): 
    clock.tick()
    img = sensor.snapshot()
    if enable_lens_corr: 
        img.lens_corr(1.8) # 适配2.8mm镜头的畸变参数

    for l in img.find_line_segments(merge_distance = 0, max_theta_diff = 5):
        # 过滤条件示例:仅保留长度大于20像素的线段
        if l.length() > 20:
            # 也可以叠加其他过滤条件,比如指定角度范围匹配仪表指针
            # if 30 < l.theta() < 150:
            img.draw_line(l.line(), color = (255, 0, 0))
            print(l)
    
    print("FPS %f" % clock.fps())

其他优化建议

  • 可以先开启merge_distance参数(建议设为2~5),合并距离相近的碎线段,减少无效识别结果
  • 针对仪表场景可以先对图像做二值化、ROI裁切,只保留表盘区域做检测,大幅提升识别准确率和速度

内容的提问来源于stack exchange,提问作者Bob Callaghan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 13:27:03