• 安装星瞳实验室APP,快速收到回复。扫描二维码或者点击 https://singtown.com/app/
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 一个提问,一个帖子,标题为问题的介绍
  • 请贴出具体的代码,与报错提示。
  • 代码一定要让别人可以运行的文本,不要贴图片
  • 色块识别不同颜色最大的模块



    • 现在只能要么识别三个颜色所有的色块,要么只识别第一种颜色的最大模块,如何实现识别三个颜色最大的色块啊

      # Multi Color Blob Tracking Example
      #
      # This example shows off multi color blob tracking using the OpenMV Cam.
      
      import sensor, image, time,math
      from pyb import UART
      import json
      
      # Color Tracking Thresholds (L Min, L Max, A Min, A Max, B Min, B Max)
      # The below thresholds track in general red/green things. You may wish to tune them...
      thresholds = [(0, 31, -53, 50, -91, 107), # generic_red_thresholds
                    (30, 100, -64, -8, -32, 32), # generic_green_thresholds
                    (0, 15, 0, 40, -80, -20)] # generic_blue_thresholds
      # You may pass up to 16 thresholds above. However, it's not really possible to segment any
      # scene with 16 thresholds before color thresholds start to overlap heavily.
      X_relative_displacement=0
      Y_relative_displacement=0
      
      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()
      
      # Only blobs that with more pixels than "pixel_threshold" and more area than "area_threshold" are
      # returned by "find_blobs" below. Change "pixels_threshold" and "area_threshold" if you change the
      # camera resolution. Don't set "merge=True" becuase that will merge blobs which we don't want here.
      
      uart = UART(3,9600)
      def find_max(blobs):
          max_size=0
          for blob in blobs:
              if blob.pixels() > max_size:
                  max_blob=blob
                  max_size = blob.pixels()
          return max_blob
      
      
      while(True):
          clock.tick()
          img = sensor.snapshot()
          blobs = img.find_blobs(thresholds, pixels_threshold=10, area_threshold=10)
          if blobs:
              max_blob = find_max(blobs)
              img.draw_rectangle(max_blob.rect())
              img.draw_cross(max_blob.cx(), max_blob.cy())
              X_data = max_blob.cx()-img.width()/2
              Y_data = img.height()/2-max_blob.cy()
              if X_data >= 0:
                  X_Sign = 0
              if X_data <= 0:
                  X_Sign = 1
              if Y_data >= 0:
                  Y_Sign = 0
              if Y_data <= 0:
                  Y_Sign = 1
      #        X_data = max_blob.cx()-40
      #       Y_data = img.height()-max_blob.cy()
      #        if X_data<0:
      #            X_data=0
      #        if X_data>255
      #            X_data=255
              X_data=abs(X_data)
              Y_data=abs(Y_data)
              X_relative_displacement=int(X_data)
              Y_relative_displacement=int(Y_data)
              img_data = bytearray([0x2C,7,X_Sign,Y_Sign,X_relative_displacement,Y_relative_displacement,0x5B])
              uart.write(img_data)
              print(X_relative_displacement,Y_relative_displacement)
      


    • 三个阈值分别进行颜色识别并调用max函数。

      blobs = img.find_blobs(thresholds[0], pixels_threshold=10, area_threshold=10)
          if blobs:
              max_blob_0 = find_max(blobs)
              ............
      
      blobs = img.find_blobs(thresholds[1], pixels_threshold=10, area_threshold=10)
          if blobs:
              max_blob_1 = find_max(blobs)
              ...............
      
      blobs = img.find_blobs(thresholds[2], pixels_threshold=10, area_threshold=10)
          if blobs:
              max_blob_2 = find_max(blobs)
              ............
      


    • 蟹蟹啦,问题解决了



    • 可不可以分享一下识别不同颜色最大色块的程序啊,谢谢



    • 请问楼主你这个程序我调好了之后,想用串口发送是识别了哪种颜色的色块,为什么不能调用blob.code()



    • @anpo 新的问题,请单独提问。



    • @wyfg 可以分享一下代码吗