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



    • 请在这里粘贴代码
      ```import sensor, image, time
      from pyb import UART
      
      uart = UART(3, 9600)    #设置为串口3、波特率为9600发送数据
      thresholds = (235, 255) #设置监测色块阈值
      
      sensor.reset()  #摄像头初始化
      sensor.set_pixformat(sensor.GRAYSCALE)  #设置为灰度模式
      sensor.set_framesize(sensor.QQVGA)      #画幅为QQVGA即分辨率为160*120
      sensor.skip_frames(time = 2000)         #跳过起始画面,获取稳定图像
      sensor.set_auto_gain(False) #在色块检测模式下关闭自动补光
      sensor.set_auto_whitebal(False) #关闭白平衡
      clock = time.clock()
      
      xPositionNow = 0    # 初始化各坐标值
      yPositionNow = 0
      xPositionLast = 0
      yPositionLast = 0
      imageSize = 128
      
      while(True):
          clock.tick()
          img = sensor.snapshot() #获取当期所采集到的图像快照
          # 设置色块阈值,具体数值情况可以通过OpenMVIDE中的阈值调整功能来得出
          # 工具 → Mechine Vision → Threshold Editor
          # area_threshold面积阈值设置为100 ,如果色块被面积小于100,则会被过滤掉
          # pixels_threshold 像素个数阈值,如果色块像素数量小于这个值,会被过滤掉
          # merge 设置为True,合并所有重叠的寻找到的blob为一个色块
          for blob in img.find_blobs([thresholds], pixels_threshold=100, area_threshold=100, merge=True):
              # 绘制相应的图形,方便我们测试的时候使用
              img.draw_rectangle(blob.rect())
              img.draw_cross(blob.cx(), blob.cy())
              x = blob.cx() - (imageSize/2)
              y = (imageSize/2) - blob.cy()
              xPositionLast = xPositionNow
              yPositionLast = yPositionNow
              #在调试的时候为了使得像素点和坐标单位cm匹配所设置的数值
              xPositionNow = x * 0.6
              yPositionNow = y * 0.6-6
              # 测试时打印出当前坐标
              print(xPositionNow, yPositionNow, end = ',')
              # 通过串口将坐标数据发送给单片机处理,实际上发送的就是一段文本
              uart.write('X:' + str(xPositionNow) + 'Y:' +  str((-1)*yPositionNow) + ',')
              # 判断当前所在区域(A\B\C\D)
              if abs(xPositionNow) < 20 and abs(yPositionNow) < 20:
                  uart.write('A\n')
                  print('A')
              elif yPositionNow < -20 and yPositionNow < xPositionNow and (-1)*yPositionNow > xPositionNow:
                  uart.write('B\n')
                  print('B')
              elif xPositionNow > 20 and (-1)*yPositionNow < xPositionNow and yPositionNow < xPositionNow:
                  uart.write('C\n')
                  print('C')
              elif yPositionNow > 20 and xPositionNow < yPositionNow and (-1)*xPositionNow < yPositionNow:
                  uart.write('D\n')
                  print('D')
              else:
                  uart.write('E\n')
                  print('E')
              # 0.5s更新一下坐标数据
              time.sleep(500)


    • time.sleep(500)改为 time.sleep_ms(500)