• 免费好用的星瞳AI云服务上线!简单标注,云端训练,支持OpenMV H7和OpenMV H7 Plus。可以替代edge impulse。 https://forum.singtown.com/topic/9519
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 请问像是一条线上两种颜色的巡线该如何实现?



    • 0_167861388.png

      
      R_THRESHOLD = (59, 25, 127, 19, -128, 89)
      G_THRESHOLD = (0, 100, -69, -32, -47, 82)
      import sensor, image, time,lcd
      from pyb import LED
      from pyb import UART
      import ustruct
      
      
      
      LED(1).on()
      LED(2).on()
      LED(3).on()
      
      uart = UART(3,115200,bits=8, parity=None, stop=1, timeout_char = 1000)
      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QQQVGA) # 80x60 (4,800 pixels) - O(N^2) max = 2,3040,000.
      lcd.init() # Initialize the lcd screen.
      sensor.set_vflip(True)
      sensor.set_hmirror(True)
      #sensor.set_windowing([0,20,80,40])
      sensor.skip_frames(time = 2000)     # WARNING: If you use QQVGA it may take seconds
      clock = time.clock()
                    # to process a frame sometimes.
      def sending_data(data1,data2):
          global uart;
          data=bytearray([0xA5,data1,data2,0XA6])
          '''data1= ustruct.pack("<bbb",      #格式为俩个字符俩个短整型(2字节)
                         0xA5,                      #帧头
                         data1,
                         data2,
                         0xA6
                         )     '''   #数组大小为7,其中2,3,4,5为有效数据,0,1,6为帧头帧尾
          uart.write(data);   #必须要传入一个字节数组
          #print("head",data[0],"status",data[1],"tail",data[2])
      
      while(True):
          clock.tick()
          img = sensor.snapshot().binary([R_THRESHOLD] )  
          #img.mean(0)
          line = img.get_regression([(100,100)], robust = True)
      
          #img.midpoint(1, bias=0.5, threshold=True, offset=5, invert=True)
          if (line):
              '''rho_err = abs(line.rho())-img.width()/2
              if line.theta()>90:
                  theta_err = line.theta()-180
              else:
                  theta_err = line.theta()
              img.draw_line(line.line(), color = 127)
              print(rho_err,theta_err)
              if line.magnitude()>8:
                sending_data((int)(rho_err),(int)(theta_err))'''         
                         
              rho_err = abs(line.rho())
              theta_err = line.theta()
              img.draw_line(line.line(), color = 127)
      
              if line.magnitude()>8:
                  sending_data((int)(rho_err),(int)(theta_err))
              rho_err_temp = abs(line.rho())-img.width()/2
              if line.theta()>90:
                  theta_err_temp = line.theta()-180
              else:
                  theta_err_temp = line.theta()
              print(rho_err_temp,theta_err_temp,line.magnitude())
      
              pass
          lcd.display(img)
          #print(clock.fps())
      
      


    • binary本来就支持多个阈值,阈值数组设置成[(蓝色阈值),(红色阈值)],就完事了。



    • 请问是如何操作呢?直接thresholds = [(颜色阈值),颜色阈值,颜色阈值]的话

      img = sensor.snapshot().binary([THRESHOLDS])
      这里就是报错TypeError: can't convert tuple to int


    • R_THRESHOLD = (59, 25, 127, 19, -128, 89)
      G_THRESHOLD = (0, 100, -69, -32, -47, 82)

      img = sensor.snapshot().binary([R_THRESHOLD, G_THRESHOLD] )