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
相关产品推荐
相关产品推荐

