• OpenMV VSCode 扩展发布了,在插件市场直接搜索OpenMV就可以安装
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 为什么右边的摄像区域还是灰度图



    • # 多颜色组合识别
      #
      # 这个例子展示了使用OpenMV Cam进行多色代码跟踪。
      #
      # 颜色代码是由两种或更多颜色组成的色块。下面的例子只会跟踪其中有两种或多种颜色的彩色物体。
      
      import sensor, image, time
      
      # 颜色跟踪阈值(L Min, L Max, A Min, A Max, B Min, B Max)
      # 下面的阈值一般跟踪红色/绿色的东西。你可以调整它们…
      thresholds = [(33, 59, 45, 105, -7, 127), # generic_red_thresholds -> index is 0 so code == (1 << 0)
                    (42, 64, 5, 36, 3, 36), # generic_yellow_thresholds -> index is 1 so code == (1 << 1)
                    (14, 88, -128, -8, -124, 78)] # generic_green_thresholds -> index is 2 so code == (1 << 2)
      # 当“find_blobs”的“merge = True”时,code代码被组合在一起。
      
      sensor.reset()
      #初始化摄像头,reset()是sensor模块里面的函数
      
      sensor.set_pixformat(sensor.GRAYSCALE)
      #sensor.set_pixformat(sensor.RGB565)
      #设置图像色彩格式,有RGB565色彩图和GRAYSCALE灰度图两种
      
      sensor.set_framesize(sensor.QVGA)
      #设置图像像素大小
      
      sensor.skip_frames(time = 2000)
      sensor.set_auto_gain(False) # 颜色跟踪必须关闭自动增益
      sensor.set_auto_whitebal(True) # 颜色跟踪必须关闭白平衡
      clock = time.clock()
      
      # 只有比“pixel_threshold”多的像素和多于“area_threshold”的区域才被
      # 下面的“find_blobs”返回。 如果更改相机分辨率,
      # 请更改“pixels_threshold”和“area_threshold”。 “merge = True”合并图像中所有重叠的色块。
      
      
      while(True):
          clock.tick()
          img = sensor.snapshot()
          img=img.to_rgb565()
          for blob in img.find_blobs([thresholds[0]], pixels_threshold=100, area_threshold=100):
              img.draw_rectangle(blob.rect())
              img.draw_cross(blob.cx(), blob.cy())
              img.draw_string(blob.x() + 2, blob.y() + 2, "reg")
              print("reg")
          for blob in img.find_blobs([thresholds[1]], pixels_threshold=100, area_threshold=100):
              img.draw_rectangle(blob.rect())
              img.draw_cross(blob.cx(), blob.cy())
              img.draw_string(blob.x() + 2, blob.y() + 2, "yellow")
              print("yellow")
          for blob in img.find_blobs([thresholds[2]], pixels_threshold=100, area_threshold=100):
              img.draw_rectangle(blob.rect())
              img.draw_cross(blob.cx(), blob.cy())
              img.draw_string(blob.x() + 2, blob.y() + 2, "green")
              print("blue")
      

      0_1697110978147_7cd0eb4e-2779-4344-b05a-88d13b9c02dd-image.png
      img=img.to_rgb565()这个不是把灰度图转为彩色图了吗,为什么不能识别颜色区域



    • to_rgb565只是改了格式,是rgb565格式的灰色。



    • @kidswong999 那怎么才能先设置为灰度图,再进入循环,然后转为彩色图,进行多颜色识别,识别完成后再转为灰度图,进行这样的循环



    • @2giq 不行,img的格式只能彩色图转为灰度图。

      二维码也可以用彩色图。



    • @kidswong999 可是我还有人像识别,人像识别不是说要用灰度图吗



    • @kidswong999 可是我还有人像识别,人像识别不是说要用灰度图吗



    • 两个方案:
      1,先用彩色的算法,然后转成灰度,然后调用灰度算法。
      2,如果是OpenMV4 H7 Plus的话,可以额外开辟一个图片,这样就可以两个图片同时存在。

      import sensor, image, time
      
      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QVGA)
      sensor.skip_frames(time = 2000)
      
      clock = time.clock()
      
      grayscale = sensor.alloc_extra_fb(sensor.width(), sensor.height(), sensor.RGB565)
      
      while(True):
          clock.tick()
          img = sensor.snapshot()
          grayscale.replace(sensor.snapshot()).to_grayscale()
          print(clock.fps())