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



    • 代码如下:
      import sensor, image, time

      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QQVGA)
      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()

      min_degree = 45
      max_degree = 135

      while(True):
      clock.tick()
      img = sensor.snapshot().lens_corr(1.8)
      for l in img.find_lines(threshold = 1000, theta_margin = 50, rho_margin = 50):
      if (min_degree <= l.theta()) and (l.theta() <= max_degree):

                  # print(l)
                  statistics = img.get_statistics()#像素颜色统计
                  #(26, 54, -51, 50, -90, -43)是蓝色的阈值,所以当区域内的众数(也就是最多的颜色),范围在这个阈值内,就说明是红色的圆。
                  #l_mean(),a_mean(),b_mean()是L通道,A通道,B通道的中位数。
                  if 26<statistics.l_mode()<54 and -51<statistics.a_mode()<50 and -90<statistics.b_mode()<-43:#if the circle is red
                      img.draw_line(l.line(), color = (255, 255, 255))#识别到蓝色直线用红色的直线表示出来
                      print(l.y1())
                      print("YES")
                  else:
                      img.draw_line(l.line(), color = (255, 0, 0))
                      #将非蓝色的线用白色的直线表示出来
                      print("NO")
      

      有几个疑问:
      1.目前不能做到同时识别颜色和直线,阈值是没问题的,是代码出现什么问题了吗?
      2.识别直线的时候,图像里的直线变化很快是为什么呢?
      0_1602412996441_QQ图片20201011184036.png



    • 图像里出现的直线都能识别,但是就是不能把目标直线单独识别出来



    • 你的统计信息,判断的是整个图片的,不是直线的颜色,也不是目标的。



    • @kidswong999 那直线的应该用哪个函数统计鸭?我是单纯的把“识别直线”和“颜色形状同时识别”的代码稍加修改结合起来的



    • 我不知道你具体要做什么?



    • @kidswong999 我想要识别蓝色的那根杆



    • @r52i 并且输出蓝色杆的y轴坐标



    • 那就直接颜色找到蓝色色块就行吧



    • @kidswong999 懂啦,谢谢~