• 免费好用的星瞳AI云服务上线!简单标注,云端训练,支持OpenMV H7和OpenMV H7 Plus。可以替代edge impulse。 https://forum.singtown.com/topic/9519
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 识别黑色的阈值问题



    • 识别黑色,设置阈值,是使用black_threshold =(100,59,33,-100,-128,30),还是GRAYSCALE_THRESHOLD = [(0, 64)],如果用灰度图的话,就红色也会当成黑色识别,这个问题怎么解决。同时,如何在不同颜色的干扰下识别指定宽度的黑色直线,如0.5cm的黑色直线



    • 既然你用灰度图有问题,那就用彩色的呗。。。

      直线你可以试试 http://book.openmv.cc/example/09-Feature-Detection/find-lines.html



    • 您说的这个,我试过,不管用。只要是直线都识别,也是灰度图,分不出哪条是自己需要的,达不到效果。
      彩色图又会特别乱,无法圈出正确的黑色区域



    • 你需要具体说一下你要做什么,最好上张图。



    • 我需要做的就是让openmv识别一条宽为0.5cm的黑线,然后上传数据```
      请在这里粘贴代码
      import sensor, image, time, pyb
      from pyb import UART
      import json
      import math

      black_threshold =(100,59,33,-100,-128,30)
      #black_threshold =(100,50,97,-126,-128,93)
      sensor.reset() # Initialize the camera sensor.
      sensor.set_pixformat(sensor.RGB565) # use RGB565.
      sensor.set_framesize(sensor.QVGA) # use QQVGA for speed.
      sensor.skip_frames(10) # Let new settings take affect.
      sensor.set_auto_whitebal(False) # turn this off.
      clock = time.clock() # Tracks FPS.

      uart = UART(3, 9600)
      uart.init(9600, bits=8, parity=None, stop=1)
      while(True):
      clock.tick()
      img = sensor.snapshot()
      img.draw_cross(160,120)

          blobs = img.find_blobs([black_threshold])
          if blobs:
              print('sum : %d'% len(blobs))
              out_str = '['
              for b in blobs:
                  img.draw_rectangle(b[0:4]) # rect
                  img.draw_cross(b[5], b[6]) # cx, cy
                  x = b[5]
                  y = b[6]
                  img.get_pixel(x,y)
                  out_str += '(%d,%d)' % (x,y)
      
              out_str += ']'
              print(out_str)
      
      
              if x<160:
                 text = "right\n"
              elif x>160:
                 text = "left\n"
              else:
                 text = "stop\n"
              for b in blobs:
                  img.draw_rectangle(b[0:4]) # rect
                  img.draw_cross(b[5], b[6]) # cx, cy
                  x = b[5]
                  y = b[6]
                  p1=Point(b[5],b[6])
                  p2=Point(160,120)
                  l=Getlen(p1,p2)
                     #获取两点之间直线的长度
      
                  print(l.getlen())
                  img.get_pixel(x,y)
                  out_str += '(%d,%d)' % (x,y)
      
              out_str += ']'
              print(out_str)
      
              uart.write(out_str+'\r\n')
      
      
              uart = UART(3, 9600)
              for i in (0,360):
                 if x<160:
                     uart.write(string1+'\r\n')
                 elif x>160:
                     uart.write(string2+'\r\n')
                 else:
                     uart.write(string5+'\r\n')
                 for j in (0,240):
                     if x<120:
                         uart.write(string3+'\r\n')
                     elif x>120:
                         uart.write(string4+'\r\n')
                     else:
                         uart.write(string5+'\r\n')
      
      
      while(True):
          clock.tick()
          img = sensor.snapshot()
      
          img.draw_cross(160,120)
          blobs = img.find_blobs([black_threshold])
          if blobs:
              print('sum : %d'% len(blobs))
              out_str = '['
              for b in blobs:
                  img.draw_rectangle(b[0:4]) # rect
                  img.draw_cross(b[5], b[6]) # cx, cy
                  x = b[5]
                  y = b[6]
                  a=b[0]+b[1]
                  c=b[1]+b[3]
                  out_str += '(%d,%d)' % (x,y)
              out_str += ']'
              print(out_str)
      
              if b[2]>b[3]:
      
      
                 if 160<a:
                     uart.write(string1+'\r\n')
                 elif 160>a:
                     uart.write(string2+'\r\n')
                 else:
                     uart.write(string5+'\r\n')
              else:
      
                 if 120<c:
                     uart.write(string4+'\r\n')
                 elif 120>c:
                     uart.write(string3+'\r\n')
                 else:
                     uart.write(string5+'\r\n')
      

      0_1527596035072964%42JWQQTOSLZC.jpg 这个图片是彩色图的黑线识别,但是识别不了

      0_15275962390Q`{QRNDOILS.jpg
      这个图片是您说的那个直线识别的程序跑出来的,openmv图像上标出的直线是乱的



    • @18892337362 图片没有上传成功



    • @yuan 没有收到您发过来的,图片上传不成功