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



    • 报错Traceback (most recent call last):
      File "", line 68, in
      File "", line 29, in find_blob_max
      NameError: local variable referenced before assignment
      OpenMV v4.4.1; MicroPython d8e38d0; OPENMV4P-STM32H743
      Type "help()" for more information.

      import sensor, image, time, math, pyb
      from pyb import UART, LED
      import json
      import ustruct
      
      thresholds_black=[(1, 41, -18, 2, -1, 14)]
      thresholds_red=[(69, 98, -1, 38, 1, 13)]
      
      
      
      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QQVGA)
      sensor.skip_frames(time = 10)
      sensor.set_auto_gain(False) # must be turned off for color tracking
      sensor.set_auto_whitebal(False) # must be turned off for color tracking
      clock = time.clock()
      
      
      uart =UART(3,115200)
      uart.init(115200, bits=8,parity=None,stop=1)
      
      def find_blob_max(blobs):
          max_size = 0
          for blob in blobs:
              if blob[2]*blob[3]>max_size:
                  max_blob = blob
                  max_size = blob[2]*blob[3]
          return max_blob
      
      
      def send_data_packet(x, y, r):        #x = rho_err 偏移的距离;a(angle) = theta_err 偏移的角度
          global uart;
      
          data = ustruct.pack("<bbbbbb",
                              0x2C,
                              0x12,
                              int(x),     #偏差距离
                              int(y),
                              int(r),
                              0x5B)
          uart.write(data)
      
      
      
      def find_CR():
          while(True):
              #iasd=0
              #print(iasd)
              clock.tick()
              img = sensor.snapshot()
              img_black = img.lens_corr(1.1).binary(thresholds_black).dilate(1)
              circlemin = img_black.find_circles(threshold = 7000, x_margin = 10, y_margin = 10, r_margin = 10,r_min = 47, r_max = 50, r_step = 2)
              if circlemin:
                  img.draw_circle(circlemin[0].x(), circlemin[0].y(), circlemin[0].r(), color = (255, 0, 0))
                  print(circlemin)
                  print(circlemin[0].x(), circlemin[0].y(), circlemin[0].r())
                  send_data_packet(circlemin[0].x(), circlemin[0].y(), circlemin[0].r())
                  break
          #print("FPS %f" % clock.fps())
      
      find_CR()
      while(True):
          clock.tick()
          img = sensor.snapshot().lens_corr(1.1).binary(thresholds_red).dilate(2)
          blobs=img.find_blobs([(96, 100, -13, 5, -11, 18)], pixels=5)
          blob_max = find_blob_max(blobs)
          print(blob_max[0:2])
          send_data_packet(blob_max[0],blob_max[1],0)
      


    • find_blob_max
      上面加一句:if blobs:

      你每考虑到没找到色块的情况。