• 星瞳AI VISION软件内测!可以离线标注,训练,并生成OpenMV的模型。可以替代edge impulse https://forum.singtown.com/topic/8206
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 怎么在这个代码里添加一个线段数量值然后达到线段数量比如识别5条线段后输出到一个引脚作低电平信号输出



    • # 线段检测例程
      #
      # 这个例子展示了如何在图像中查找线段。对于在图像中找到的每个线对象,
      # 都会返回一个包含线条旋转的线对象。
      
      # find_line_segments()找到有限长度的线(但是很慢)。
      # Use find_line_segments()找到非无限的线(而且速度很快)。
      
      enable_lens_corr = False # turn on for straighter lines...打开以获得更直的线条…
      
      import sensor, image, time
      
      sensor.reset()
      sensor.set_pixformat(sensor.RGB565) # 灰度更快
      sensor.set_framesize(sensor.QQVGA)
      sensor.skip_frames(time = 2000)
      clock = time.clock()
      
      # 所有线段都有 `x1()`, `y1()`, `x2()`, and `y2()` 方法来获得他们的终点
      # 一个 `line()` 方法来获得所有上述的四个元组值,可用于 `draw_line()`.
      
      while(True):
          clock.tick()
          img = sensor.snapshot()
          if enable_lens_corr: img.lens_corr(1.8) # for 2.8mm lens...
      
          # `merge_distance`控制附近行的合并。 在0(默认),没有合并。 
          # 在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))
              # print(l)
      
          print("FPS %f" % clock.fps())
      


    • 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()
      
      pin1 = Pin('P1', Pin.OUT_PP, Pin.PULL_NONE)
      pin1.value(0)
      
      while(True):
          clock.tick()
          img = sensor.snapshot()
          if enable_lens_corr: img.lens_corr(1.8) # for 2.8mm lens...
          segments = img.find_line_segments(merge_distance = 0, max_theta_diff = 5)
          if len(segments) > 5:
              pin1.value(1)
          else:
              pin1.value(0)
          for l in segments:
              img.draw_line(l.line(), color = (255, 0, 0))
              # print(l)
      
          print("FPS %f" % clock.fps())
      


    • This post is deleted!


    • This post is deleted!


    • @kidswong999 谢谢了!非常感谢!



    • @kidswong999 这段代码要怎么加一段 能过滤掉一些短的线 或不直的线段 要怎么过滤?



    • 过滤短的线:

      result_segments = []
      
      for l in segments:
          if l.length() > 50:
              result_segments.append(l)
      
      

      不直的线段,一般不会检测出来。



    • @kidswong999 非常感谢!要怎么插入到那段代码上呢,刚贴进去,报错



    • @kidswong999 哦 放进去了 就是还有很多出现很短的线 要怎么屏蔽过滤



    • @kidswong999 你好!在吗?怎么过滤掉那个比较短的线。或者说只识别边缘的线段就可以。可以这样设置吗



    • @kidswong999 在吗 在吗过滤短的线条



    • @kidswong999怎么在这个代码里添加一个线段数量值然后达到线段数量比如识别5条线段后输出到一个引脚作低电平信号输出 中说:

      result_segments = []

      for l in segments:
      if l.length() > 50:
      result_segments.append(l)

      这段代码放上去过滤不了 短的线 没效果



    • 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()
      
      pin1 = Pin('P1', Pin.OUT_PP, Pin.PULL_NONE)
      pin1.value(0)
      
      while(True):
          clock.tick()
          img = sensor.snapshot()
          if enable_lens_corr: img.lens_corr(1.8) # for 2.8mm lens...
          segments = img.find_line_segments(merge_distance = 0, max_theta_diff = 5)
          result_segments = []
      
          for l in segments:
              if l.length() > 50:
                  result_segments.append(l)
      
          if len(result_segments) > 5:
              pin1.value(1)
          else:
              pin1.value(0)
          for l in result_segments:
              img.draw_line(l.line(), color = (255, 0, 0))
              # print(l)
      
          print("FPS %f" % clock.fps())
      


    • @kidswong999怎么在这个代码里添加一个线段数量值然后达到线段数量比如识别5条线段后输出到一个引脚作低电平信号输出 中说:

      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()

      pin1 = Pin('P1', Pin.OUT_PP, Pin.PULL_NONE)
      pin1.value(0)

      while(True):
      clock.tick()
      img = sensor.snapshot()
      if enable_lens_corr: img.lens_corr(1.8) # for 2.8mm lens...
      segments = img.find_line_segments(merge_distance = 0, max_theta_diff = 5)
      result_segments = []

      for l in segments:
          if l.length() > 50:
              result_segments.append(l)
      
      if len(result_segments) > 5:
          pin1.value(1)
      else:
          pin1.value(0)
      for l in result_segments:
          img.draw_line(l.line(), color = (255, 0, 0))
          # print(l)
      
      print("FPS %f" % clock.fps())
      

      现在是可以过滤掉短的了 ,然后有一个就是 这个有办法过滤掉,好的线段的跳动吗?跳动变动,输出信号不稳定,



    • @chep 这个不行,不是过滤的问题。