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



    • # Untitled - By: 81245 - 周三 7月 28 2021
      
      import sensor, image, time ,lcd
      
      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QQVGA)
      sensor.skip_frames(time = 2000)
      
      sensor.set_auto_gain(False) # 颜色跟踪必须关闭自动增益
      sensor.set_auto_whitebal(False) # 颜色跟踪必须关闭白平衡
      sensor.set_auto_exposure(False)
      lcd.init()
      
      '''
      红色 (20, 62, 31, 93, 18, 65)
      蓝色 (16, 63, -24, 51, -88, -19)
      绿色 (34, 72, -55, 28, 24, 59)
      黑色 (0, 42, -13, 7, -18, 6)
      白色 (56, 78, -9, -1, -20, -3)
      '''
      thresholds =[(20, 62, 31, 93, 18, 65),
                  (16, 63, -24, 51, -88, -19),
                  (34, 72, -55, 28, 24, 59),
                  (0, 42, -13, 7, -18, 6),
                  (56, 78, -9, -1, -20, -3)]
      
      clock = time.clock()
      
      def max_pixel(pixle_num):
          Max_pixel = 0
          Max_num= 0
          for i in range(5) :
              if Max_pixel < pixle_num[i]:
                  Max_pixel = pixle_num[i]
                  Max_num = i
          return Max_num
      yanse = ["红色","蓝色","绿色","黑色","白色"]
      while(True):
      
          clock.tick()
          img = sensor.snapshot().lens_corr(1.3)
          for c in img.find_circles(threshold = 3500, x_margin = 5, y_margin = 5, r_margin = 5,r_min = 5, r_max = 100, r_step = 2):
              pixel_num = [0,0,0,0,0]
              c_rectangle = (c.x()-c.r(),c.y()-c.r(),c.r()*2,c.r()*2)
              print(c_rectangle)
              img.draw_circle(c.x(), c.y(), c.r())
              #img.draw_rectangle(c_rectangle)
              print(c)
              for i in range(5):
                  for blob in img.find_blobs([thresholds[i]],roi=c_rectangle,merge = True):
                      pixel_num[i] = blob.pixels()
              this_c_color = max_pixel(pixel_num)
              print(yanse[this_c_color])
          lcd.display(img)
          print(clock.fps())
      

      我采用霍夫圆检测,为什么白色和绿色一直检测不到,是因为阴影吗

      0_1627526924198_64b68cdf10c5b0ec1c6286f91ae2e32.png



    • 是因为对比度不够,边缘不够明显。



    • find_circles里的阈值改一下。



    • @kidswong999 是再加还是减小