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



    • 就是运行程序的时候,视野里必须有三种颜色的存在,程序才能正常运行,不然会显示某一个颜色defined.



    • 你的现象很正常。变量未定义。



    • 如果你想解决问题,请提供你想要做什么?



    • 就是在做颜色识别排序,我把各种颜色的矩形框中心坐标分别赋值给a,b,c.然后运行程序的时候就会出现,当前摄像头视野里如果没有这几种颜色,他就说我未定义,比如我b赋值的是绿色阈值的块中心X坐标,然后我画面里没有绿色,程序就会报未定义的错。



    • 肯定是你的逻辑有问题导致的。

      如果涉及代码,需要报错提示与全部代码文本,请注意不要贴代码图片



    • import sensor, image, time, math
      
      # 颜色跟踪阈值(L Min, L Max, A Min, A Max, B Min, B Max)
      # 下面的阈值跟踪一般红色/绿色的东西。你不妨调整他们...
      red_threshold=(45, 79, 10, 127, -128, 127) # generic_red_thresholds
      green_threshold=(38, 75, -128, -35, -128, 127) # generic_green_thresholds
      blue_threshold=(9, 54, -128, 20, -120, 1) # generic_blue_thresholds
                   
      # 您最多可以传递16个阈值。
      # 但是,在颜色阈值开始重叠之前,实际上不可能使用16个阈值对任何场景进行分段。
      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QVGA)
      sensor.skip_frames(time = 2000)
      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()
      
      # 只有比“pixel_threshold”多的像素和多于“area_threshold”的区域才被
      # 下面的“find_blobs”返回。 如果更改相机分辨率,
      # 请更改“pixels_threshold”和“area_threshold”。 “merge = True”合并图像中所有重叠的色块。
      
      
      while(True):
                  
          clock.tick()
          
          img = sensor.snapshot()
          for code in img.find_qrcodes():
                  print(code)
          for blob in img.find_blobs([red_threshold], pixels_threshold=500, area_threshold=200):
              # These values depend on the blob not being circular - otherwise they will be shaky.
              if blob.elongation() > 0.5:
               
                  img.draw_edges(blob.min_corners(), color=(255,0,0))
                  img.draw_line(blob.major_axis_line(), color=(0,255,0))
                  img.draw_line(blob.minor_axis_line(), color=(0,0,255))
              # These values are stable all the time.
               
              img.draw_rectangle(blob.rect())
              img.draw_cross(blob.cx(), blob.cy())
              a=blob.cx()
              # Note - the blob rotation is unique to 0-180 only.
              img.draw_keypoints([(blob.cx(), blob.cy(), int(math.degrees(blob.rotation())))], size=20)
          
          
      
          for blob in img.find_blobs([green_threshold], pixels_threshold=500, area_threshold=200):
              # These values depend on the blob not being circular - otherwise they will be shaky.
              if blob.elongation() > 0.5:
               
                  img.draw_edges(blob.min_corners(), color=(255,0,0))
                  img.draw_line(blob.major_axis_line(), color=(0,255,0))
                  img.draw_line(blob.minor_axis_line(), color=(0,0,255))
              # These values are stable all the time.
               
              img.draw_rectangle(blob.rect())
              img.draw_cross(blob.cx(), blob.cy())
              b=blob.cx()
              # Note - the blob rotation is unique to 0-180 only.
              img.draw_keypoints([(blob.cx(), blob.cy(), int(math.degrees(blob.rotation())))], size=20)
         
          
      
          for blob in img.find_blobs([blue_threshold], pixels_threshold=500, area_threshold=200):
              # These values depend on the blob not being circular - otherwise they will be shaky.
              if blob.elongation() > 0.5:
               
                  img.draw_edges(blob.min_corners(), color=(255,0,0))
                  img.draw_line(blob.major_axis_line(), color=(0,255,0))
                  img.draw_line(blob.minor_axis_line(), color=(0,0,255))
              # These values are stable all the time.
               
              img.draw_rectangle(blob.rect())
              img.draw_cross(blob.cx(), blob.cy())
              c=blob.cx()
              # Note - the blob rotation is unique to 0-180 only.
              img.draw_keypoints([(blob.cx(), blob.cy(), int(math.degrees(blob.rotation())))], size=20)
          
              print("红:",a,"绿:",b,"蓝:",c)
              
      import time
      from pyb import UART
      
      uart = UART(3, 19200)
      
      while(True):
          uart.write(code.payload())
          maxn=max(a,b,c)
          minn=min(a,b,c)
          mn=a+b+c-maxn-minn
          if maxn == a and minn == b:
             uart.write("123")
          elif maxn == a and minn == c:
             uart.write ("132")
          elif maxn == b and minn == a:
             uart.write("231")
          elif maxn == b and minn == c:
             uart.write ("213")
          elif maxn == c and minn == a:
             uart.write("321")
          elif maxn == c and minn == b:
             uart.write ("312")
          
          time.sleep(1000)
      

      新手哈哈,有点菜的代码。



    • 两个死循环,后面的永远不会运行。



    • 代码实在太渣。
      看一下视频:https://singtown.com/learn/50029/



    • @kidswong999 主要是为什么会先去图像里找颜色再进行输出。



    • @kidswong999 代码我把没用的删了,求指导

      import sensor, image, time, math
      
      from pyb import UART
      red_threshold=(0, 58, 42, 75, 21, 127)
      green_threshold=(44, 100, -17, -128, 6, 127) 
      blue_threshold=(0, 37, 5, 33, -63, -17)
                   
      
      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QVGA)
      sensor.skip_frames(time = 2000)
      sensor.set_auto_gain(False) 
      sensor.set_auto_whitebal(False) 
      clock = time.clock()
      while(True):
                  
          clock.tick()
          img = sensor.snapshot().lens_corr(strength = 1.8, zoom = 1.0)
          for code in img.find_qrcodes():
                  print(code)
          
          for blob in img.find_blobs([red_threshold], pixels_threshold=100, area_threshold=100):       
              if blob.elongation() > 0.5:
               img.draw_rectangle(blob.rect())
               img.draw_cross(blob.cx(), blob.cy())
               a=blob.cx()
              
               
          
          
      
          for blob in img.find_blobs([green_threshold], pixels_threshold=100, area_threshold=100):
              if blob.elongation() > 0.5:
               img.draw_rectangle(blob.rect())
               img.draw_cross(blob.cx(), blob.cy())
               b=blob.cx()
               
               
         
          
      
          for blob in img.find_blobs([blue_threshold], pixels_threshold=100, area_threshold=100):
              if blob.elongation() > 0.5:
               img.draw_rectangle(blob.rect())
               img.draw_cross(blob.cx(), blob.cy())
               c=blob.cx()
              
          
              print("红:",a,"绿:",b,"蓝:",c)
              
      
      
      
              uart = UART(3, 19200)
      
      while(True):
          uart.write(code.payload())
          maxn=max(a,b,c)
          minn=min(a,b,c)
          mn=a+b+c-maxn-minn
          if maxn == a and minn == b:
             uart.write("123")
          elif maxn == a and minn == c:
             uart.write ("132")
          elif maxn == b and minn == a:
             uart.write("231")
          elif maxn == b and minn == c:
             uart.write ("213")
          elif maxn == c and minn == a:
             uart.write("321")
          elif maxn == c and minn == b:
             uart.write ("312")
          
          time.sleep(1000)
      


    • @kidswong999 救救孩子。