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



    • 0_1720943519703_QQ图片20240714155146.jpg

      import sensor, image, time, math, pyb,time
      from pyb import UART, LED
      import ustruct
      
      LED_R = pyb.LED(1) # Red LED = 1, Green LED = 2, Blue LED = 3, IR LEDs = 4.
      LED_G = pyb.LED(2)
      LED_B = pyb.LED(3)
      
      LED_R.on()
      LED_G.on()
      LED_B.on()
      
      red_threshold_01 = ((100, 96, -7, 7, -22, 11)) # 红色阈值
      black_color_threshold = (0, 14, -5, 48, -28, 17) # RGB565格式,对应黑色的阈值范围
      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QVGA)
      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()
      
      #LED_G.off()
      
      uart = UART(3, 9600)   # 定义串口3变量
      uart.init(9600, bits=8, parity=None, stop=1) # init with given parameters
      #data =f'* 90 135 90 45 45 45 45 135 90 135\r\n'
      #uart.write(data) 
      
      
      #def sending_data(cx, cy):
      #   global uart
      #   ax=90+30/320*(160-cx)
      #   ay=90+30/240*cy
      #   print(f'{ay:.2f},{ax:.2f}')
      #   uart.write(f'* {ay:.2f} {ax:2f}\r\n')   
      while True:
          max_area = 0
          max_rect = None
          clock.tick()
          img = sensor.snapshot()
          for r in img.find_rects(threshold=10000):
              # 只处理黑色的矩形
              blobs = img.find_blobs([black_color_threshold], pixels_threshold=200, area_threshold=200, merge=True)
              if blobs:
                  area = r.w() * r.h()
                  if area > max_area:
                      max_area = area
                      max_rect = r
          if max_rect:
              img.draw_rectangle(max_rect.rect(), color=(255, 0, 0))
              corners = max_rect.corners()
              # 数据处理
              datas=[]
              print("左下 右下 右上 左上", corners)
              for p in corners:
                  img.draw_circle(p[0], p[1], 5, color=(0, 255, 0))
                  ax=90+30/320*(160-p[0])
                  ay=90+30/240*p[1]
                  datas.append(ay)
                  datas.append(ax)
              datas_str = ' '.join(str(data) for data in datas)
              print(f'datas:{datas_str}')
              uart.write(f'* {datas_str}\r\n')
      


    • 因为find_rects不能用在QVGA上。find_rects需要的内存多,OpenMV4 H7的内存不够。