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



    • # Blob Detection Example
      #
      # This example shows off how to use the find_blobs function to find color
      # blobs in the image. This example in particular looks for dark green objects.
      
      import sensor, image, time, pyb,mjpeg
      from pyb import UART,Pin,Timer
      import utime
      import json
      uart=pyb.UART(3,115200,timeout_char=1000)
      uart.init(115200, bits=8, parity=None, stop=1)
      
      p_out = Pin('P7',Pin.OUT_PP)
      p_out.low()
      
      # For color tracking to work really well you should ideally be in a very, very,
      # very, controlled enviroment where the lighting is constant...
      blue_threshold_01 = (0, 100, -16, 127, -128, -31)
      
      #设置蓝色的阈值,括号里面的数值分别是L A B 的最大值和最小值(minL, maxL, minA,
      # maxA, minB, maxB),LAB的值在图像左侧三个坐标图中选取。如果是灰度图,则只需
      #设置(min, max)两个数字即可。
      
      # You may need to tweak the above settings for tracking green things...
      # Select an area in the Framebuffer to copy the color settings.
      
      sensor.reset() # Initialize the camera sensor.
      sensor.set_pixformat(sensor.RGB565) # use RGB565.
      sensor.set_framesize(sensor.QVGA) # use QVGA for quailtiy ,use QQVGA for speed.
      sensor.skip_frames(10) # Let new settings take affect.
      sensor.set_auto_whitebal(False)
      #关闭白平衡。白平衡是默认开启的,在颜色识别中,需要关闭白平衡。
      clock = time.clock() # Tracks FPS.
      
      '''
        扩宽roi
      '''
      def expand_roi(roi):
          # set for QQVGA 160*120
          extra = 5
          win_size = (160, 120)
          (x, y, width, height) = roi
          new_roi = [x-extra, y-extra, width+2*extra, height+2*extra]
      
          if new_roi[0] < 0:
              new_roi[0] = 0
          if new_roi[1] < 0:
              new_roi[1] = 0
          if new_roi[2] > win_size[0]:
              new_roi[2] = win_size[0]
          if new_roi[3] > win_size[1]:
              new_roi[3] = win_size[1]
      
          return tuple(new_roi)
      
      
      
      
      
      while(True):
          clock.tick() # Track elapsed milliseconds between snapshots().
          img = sensor.snapshot() # Take a picture and return the image.
          #  pixels_threshold=100, area_threshold=100
          blobs = img.find_blobs([blue_threshold_01], area_threshold=150)
      
          if blobs:
          #如果找到了目标颜色
            # print(blobs)
             for blob in blobs:
             #迭代找到的目标颜色区域
                  is_circle = False
                  max_circle = None
                  max_radius = -1
      
                  new_roi = expand_roi(blob.rect())
      
                  for c in img.find_circles(threshold = 2000, x_margin = 20, y_margin = 20, r_margin = 10, roi=new_roi):
                      is_circle = True
                      # img.draw_circle(c.x(), c.y(), c.r(), color = (255, 255, 255))
                      if c.r() > max_radius:
                          max_radius = c.r()
                          max_circle = c
                  if is_circle:
                      # 如果有对应颜色的圆形 标记外框
                      # Draw a rect around the blob.
                      img.draw_rectangle(new_roi) # rect
                      img.draw_rectangle(blob.rect()) # rect
                      #用矩形标记出目标颜色区域
                      img.draw_cross(blob[5], blob[6]) # cx, cy
                      img.draw_circle(max_circle.x(), max_circle.y(), max_circle.r(), color = (0, 0, 255))
                      img.draw_circle(max_circle.x(), max_circle.y(), max_circle.r() + 1, color = (0, 0, 255))
                      print(blob[5], blob[6])
                      z=100            
                      x_h=(blob[5]>>8)&0xff
                      x_l=blob[5]&0xff
                      y_h=(blob[6]>>8)&0xff
                      y_l=blob[6]&0xff
                      z_h=(z>>8)&0xff
                      z_l=z&0xff
                      data=bytearray([0x02,x_h,x_l,y_h,y_l,z_h,z_l,0x06,0x0D,0X0A])
                      print('you send:',data)
                      uart.write(data)
                  if (sensor.width/2 -10<=blob[5]<=sensor.width/2 +10) and (sensor.height/2 -10<=blob[6]<=sensor.height/2 +10):
                      z=50
                      x_h=(blob[5]>>8)&0xff
                      x_l=blob[5]&0xff
                      y_h=(blob[6]>>8)&0xff
                      y_l=blob[6]&0xff
                      z_h=(z>>8)&0xff
                      z_l=z&0xff
                      data1=bytearray([0x02,x_h,x_l,y_h,y_l,z_h,z_l,0x06,0x0D,0X0A])
                      print('you send:',data1)
                      uart.write(data1)
                      timesleep(1000)
                      timesleep(1000)
                      timesleep(1000)
                      z=0
                      x_h=(blob[5]>>8)&0xff
                      x_l=blob[5]&0xff
                      y_h=(blob[6]>>8)&0xff
                      y_l=blob[6]&0xff
                      z_h=(z>>8)&0xff
                      z_l=z&0xff
                      data2=bytearray([0x02,x_h,x_l,y_h,y_l,z_h,z_l,0x06,0x0D,0X0A])
                      print('you send:',data2)
                      uart.write(data2)
                      #p_out.high()
      
      
          print(clock.fps()) # Note: Your OpenMV Cam runs about half as fast while
          # connected to your computer. The FPS should increase once disconnected.!
      

      0_15563372ng



    • sensor.width是个啥?

      函数调用要用括号。

      sensor.width()