• 免费好用的星瞳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_1636174946533_46284e8b3f9e95e581df1efb201cc23.png



    • import sensor, image, time
      from pyb import UART
      from pyb import LED
      from image import SEARCH_EX,SEARCH_DS
      
      
      #pink_threshold = (65, 21, 7, 67, 55, -2)
      #pink_threshold =(42, 62, 67, 14, -16, 65)
      pink_threshold = (65, 21, 7, 67, 55, -2)
      pink_color_code = 1 # code = 2^0 = 1
      uart = UART(3, 115200)
      uart.init(115200, bits=8, parity=None, stop=1)  #8位数据位,无校验位,1位停止位、
      
      sensor.reset() # 初始化摄像头
      sensor.set_contrast(1)#对比度
      sensor.set_gainceiling(16)#图像增益上限
      sensor.set_pixformat(sensor.RGB565) # 选择像素模式 RGB565.
      sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.
      sensor.skip_frames(time = 2000) # Let new settings take affect.
      #sensor.set_pixformat(sensor.GRAYSCALE)
      sensor.set_auto_gain(False) # 颜色跟踪必须关闭自动增益
      sensor.set_auto_whitebal(False) #关闭白平衡。白平衡是默认开启的,在颜色识别中,需要关闭白平衡。
      templates =["111.pgm","221.pgm","333.pgm","334.pgm","335.pgm","443.pgm","444.pgm.",
      "555.pgm","556.pgm","557.pgm","666.pgm","667.pgm","777.pgm","778.pgm","888.pgm"]
      clock = time.clock() # Tracks FPS.
      
      shj=0
      while(shj == 0):
          clock.tick()
          img = sensor.snapshot()
          img = img.to_grayscale()
          for t in templates:
              template = image.Image(t)
              r = img.find_template(template, 0.70, step=4, search=SEARCH_EX)
              if r:
                  shj=t[0]
                  LED(2).on()
                  time.sleep_ms(3000)
                  LED(2).off()
      x=[]
      for i in range(len(templates)):
          if shj == templates[i][0]:
              x.append(templates[i])
      flag = 1
      while(True):
          clock.tick()
          img = sensor.snapshot()
          img = img.to_grayscale()
          if flag == 1:
              for t in x:
                      h = image.Image(t)
                      r = img.find_template(h, 0.70, step=4, search=SEARCH_EX)
                      if r:
                          img.draw_rectangle(r,0)
                          if(r[0]+(r[2]/2) > sensor.width() /2):
                              uartData = bytearray([0xa5,0x2b,0x01])
                          elif(r[0]+(r[2]/2) < sensor.width()/2):
                              uartData = bytearray([0xa5,0x2b,0x02])
                          flag = 0
                          LED(1).on()
                          uart.write(uartData)
          
          clock.tick()
          img = sensor.snapshot()
          blobs = img.find_blobs([pink_threshold], area_threshold=100)
          if blobs:
          ##如果找到了目标颜色
              for blob in blobs:
              ##迭代找到的目标颜色区域
                  x = blob[0]
                  y = blob[1] #
                  width = blob[2] # 色块矩形的宽度
                  height = blob[3] # 色块矩形的高度
      
                  center_x = blob[5] # 色块中心点x值
                  center_y = blob[6] # 色块中心点y值
      
                  color_code = blob[8] # 颜色代码
      
                  ## 添加颜色说明
                  if color_code == pink_color_code:
                      img.draw_string(x, y - 10, "red", color = (0xFF, 0x00, 0x00))
      
                  ##用矩形标记出目标颜色区域
                  img.draw_rectangle([x, y, width, height])
                  ##在目标颜色区域的中心画十字形标记
                  img.draw_cross(center_x, center_y)
      


    • 这个代码我测试不出来, 因为复现条件很复杂,一直27行的死循环出不来。

      建议精简出只出错的部分,可以运行的,一运行就可以复现问题的代码。



    • @kidswong999 已经解决了,谢谢