• OpenMV VSCode 扩展发布了,在插件市场直接搜索OpenMV就可以安装
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 能不能在上一次输出的坐标和这一次输出的坐标来绘画线段



    • 0_1647509368080_0ab75b57-690c-4bca-b9b3-75ba3ffe443d-image.png



    • 定义变量就行了啊。

      上一次的数据 = 0
      while True:
          这一次的数据 = img.findxxx()
          print(这一次的数据, 上一次的数据)
          上一次的数据 = 这一次的数据 
      


    • 我要在b[5],b[6]这个坐标的两次输出画线,我应该怎么改能?刚接触代码,纯小白不是很懂怎么改

      #进行帧分差并对差值的像素点进行色块识别,输出它的坐标
      
      import sensor, image, pyb, os, time
      
      TRIGGER_THRESHOLD = 5
      green_threshold   = (15,80)
      
      BG_UPDATE_FRAMES = 50 # 融合前有多少帧。
      BG_UPDATE_BLEND = 128 # How much to blend by... ([0-256]==[0.0-1.0]).
      
      sensor.reset() # 复位并初始化传感器。
      
      sensor.set_pixformat(sensor.GRAYSCALE) # or sensor.RGB565
      #设置图像色彩格式,有RGB565色彩图和GRAYSCALE灰度图两种
      
      sensor.set_framesize(sensor.QVGA) # or sensor.QQVGA (or others)
      #设置图像像素大小
      
      sensor.skip_frames(time = 2000) # 让新的设置生效。
      sensor.set_auto_whitebal(False) # 关闭白平衡。
      clock = time.clock() # 跟踪FPS帧率
      
      # 从主帧缓冲区的RAM中取出以分配第二帧缓冲区。
      # 帧缓冲区中的RAM比MicroPython堆中的RAM多得多。
      # 但是,在执行此操作后,您的某些算法的RAM会少得多......
      # 所以,请注意现在摆脱RAM问题要容易得多。
      # 然而,帧差分不会占用帧缓冲区中的大量额外空间。
      # 但是,如果你这样做,像AprilTags这样的东西会起作用,也可能不会起作用...
      extra_fb = sensor.alloc_extra_fb(sensor.width(), sensor.height(), sensor.RGB565)
      
      print("About to save background image...")
      sensor.skip_frames(time = 20) # 给用户一个时间来准备
      extra_fb.replace(sensor.snapshot())
      print("Saved background image - Now frame differencing!")
      
      triggered = False
      
      frame_count = 0
      while(True):
          clock.tick() # 追踪两个snapshots()之间经过的毫秒数.
          img = sensor.snapshot() # 拍一张照片,返回图像
      
          frame_count += 50
          if (frame_count > BG_UPDATE_FRAMES):
              frame_count = 0
              # 融入新的帧。 我们在这里做256-alpha,因为我们想将新帧混合到背景中。
              # 而不是把背景融入到新帧(这仅仅做alpha)。
              # 通过((NEW*(alpha))+(OLD*(256-alpha)))/256融合每个像素。
              # 因此,低alpha导致新图像的低混合,而高alpha导致新图像的高混合。我们需要对此更新进行反转。
              #img.blend(extra_fb, alpha=(256-BG_UPDATE_BLEND))
              extra_fb.replace(img)
      
      
      
          # 用 "abs(NEW-OLD)" 帧差替换图像。
          img.difference(extra_fb)
          blobs = img.find_blobs([green_threshold],meger = True,margin=100)
          if blobs:
              for b in blobs:
                  img.draw_rectangle(b[0:4]) # rect
                  #用矩形标记出目标颜色区域
                  img.draw_cross(b[5], b[6]) # cx, cy
                  #在目标颜色区域的中心画十字形标记
                  print(b[5], b[6])
                  #输出目标物体中心坐标
                  img.draw_line()
                  
                  
                  
      
          #hist = img.get_histogram()
          # 下面的代码通过比较第99百分位值(例如,非离群值最大值与第90百分位值(例如非最大值)来工作。
          # 两个值之间的差异将随着差异图像看起来像素变化而增大。
          #diff = hist.get_percentile(0.99).l_value() - hist.get_percentile(0.90).l_value()
          #triggered = diff > TRIGGER_THRESHOLD
      
          print(clock.fps()) # 注意: 当连接电脑后,OpenMV会变成一半的速度。当不连接电脑,帧率会增加。
      


    • 你有几个逻辑没有捋清楚。

      1,每次采集都会有多个小球的中心坐标,那么是不是要筛选?
      2,相邻帧的小球都间隔很小,只有几个像素画出来没效果。

      建议你说清楚具体要做什么。



    • 不用筛选,因为我的摄像头是固定的,同一时间只有一个点,也就是我用激光笔照出来的那个点



    • @kidswong999 大佬,救救孩子



    • 你具体要做什么啊。