星瞳实验室APP,快速收到回复
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 识别色卡颜色并找到相对应颜色的气球扎破,我写的这个代码可以实现吗?



    • import sensor, image, time
      
      sensor.reset() # 初始化摄像头
      sensor.set_pixformat(sensor.RGB565) # 格式为 RGB565.
      sensor.set_framesize(sensor.QVGA)
      sensor.skip_frames(10) # 跳过10帧,使新设置生效
      sensor.set_auto_whitebal(False)               
      sensor.set_auto_gain(False)
      clock=time.clock()
      ROI=(0,0,300,300)
      
      while(True):
          img = sensor.snapshot()         
          statistics=img.get_statistics(roi=ROI)
          color_l=statistics.l_mode()
          color_a=statistics.a_mode()
          color_b=statistics.b_mode()
          print(color_l,color_a,color_b)
          img.draw_rectangle(ROI)
          anycolor_threshold=(color_l,color_a,color_b)
          blobs =img.find_blobs([anycolor_threshold])
          if blobs:
          #如果找到了目标颜色
              for b in blobs:
                   img.draw_rectangle(b[0:4]) 
                   img.draw_cross(b[5], b[6]) 
                  
      
              print(clock.fps())
        
      


    • 需要你自己测试。如果出现了问题可以问具体问题。



    • 0_1631938486699_视觉.png 请问这是什么原因呢



    • 最后结果不对?

      我看你的代码是ROI=(0,0,300,300),可是你的画面是QVGA(320*240)





    • @kidswong999 这个代码测出来的画面有跟踪颜色的,是可以的,是我这个的代码不对吗,用统计信息得到的LAB颜色值是不等同于颜色阈值吗,我把roi调成(0,0,320,240)还是这样 黑色也出现好多+
      0_1632301104580_19fa9e13-b144-4ac6-8fcc-ae7555db9a50-image.png



    • LAB是有上下范围的,你把例子里的阈值打印出来,再把你的代码里的阈值打印出来看看就知道了。



    • import sensor, image, time
      red_threshold=(0, 100, 7, 127, -128, 127)
      green_threshold=(0, 100, -128, -28, -128, 127)
      blue_threshold=(14, 87, -83, 127, -113, -14)
      red_color_code = 1
      blue_color_code = 4
      green_color_code = 8
      
      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QVGA)
      sensor.skip_frames(10) # 跳过10帧,使新设置生效
      sensor.set_auto_whitebal(False)
      sensor.set_auto_gain(False)
      clock=time.clock()
      ROI=(0,0,80,80)
      
      while(True):
          img = sensor.snapshot()
          statistics=img.get_statistics(roi=ROI)
          color_l_min=statistics.l_min()
          color_a_min=statistics.a_min()
          color_b_min=statistics.b_min()
          color_l_max=statistics.l_max()
          color_a_max=statistics.a_max()
          color_b_max=statistics.b_max()
          anycolor_threshold=(color_l_min,color_l_max,color_a_min,color_a_max,color_b_min,color_b_max)
          blobs=img.find_blobs([anycolor_threshold],area_threshold=100)
          if anycolor_threshold==red_threshold:
              blobs =img.find_blobs([red_threshold],area_threshold=100)
          elif anycolor_threshold==green_threshold:
              blobs =img.find_blobs([green_threshold],area_threshold=100)
          elif anycolor_threshold==blue_threshold:
              blobs =img.find_blobs([blue_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]
                  center_y = blob[6]
                  color_code = blob[8]
                  if color_code == red_color_code:
                      img.draw_string(x, y - 10, "red", color = (0xFF, 0x00, 0x00))
                  elif color_code == blue_color_code:
                      img.draw_string(x, y - 10, "blue", color = (0xFF, 0x00, 0x00))
                  elif color_code == green_color_code:
                      img.draw_string(x, y - 10, "green", color = (0xFF, 0x00, 0x00))
      
                  #用矩形标记出目标颜色区域
                  img.draw_rectangle(blob[0],blob[1],blob[2],blob[3])
                  #在目标颜色区域的中心画十字形标记
                  img.draw_cross(blob[5], blob[6])
      
      
      
          print(clock.fps())
      
      


    • @kidswong999 0_1632409823687_81b8d602-1e1e-45df-97a8-3d2dbf27c55c-image.png
      代码改了一点 结果是这样的