• OpenMV VSCode 扩展发布了,在插件市场直接搜索OpenMV就可以安装
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 想调用两个曝光值,但是运行到第二个曝光值的时候摄像头就会卡住



    • !!!而且在第一次曝光值的时候图像的亮暗还有点不一样,想知道在一个程序里面可以调用两次不一样的曝光吗!!!

      # LOTS OF Blob Detection
      
      import sensor, image, time, math
      from pyb import UART
      import json
      import ustruct
      
      # 如果要保证颜色追踪效果的话, 需要对环境的严格控制
      # 晚上光源的冷暖色等,都会对颜色追踪造成很大的影响
      
      # 彩色图片颜色的阈值格式组成, 是由LAB颜色空间的各自最小值与最大值组成
      # 点击右侧的颜色空间下拉选择按钮, 默认为RGB Color Space
      # 参考右侧的LAB Color Space里面的参数
      # (minL, maxL, minA, maxA, minB, maxB)
      # 灰度图的阈值格式
      # (min, max)
      
      white_threshold_01 = ((95, 100, -18, 3, -8, 4));  #白色阈值
      red_threshold_01 = ((59, 10![1_1676624143446_亮的.png](https://fcdn.singtown.com/1fb27ea1-a65a-4394-9dde-15a3c89e9c8e.png) ![0_1676624143444_较暗的.png](https://fcdn.singtown.com/7e827a4b-967f-4f1c-b602-b4337e12393f.png) 0, 38, 96, 20, 63));
      green_threshold_01 = ((29, 91, -128, -18, 19, 46));
      yellow_threshold_01 = ((34, 100, -31, 42, 48, 84));
      
      runData2	= [0x55,0x02,0x91,0x00,0x02,0x00,0x00,0xBB]
      
      sensor.reset() # 初始化摄像头
      sensor.set_pixformat(sensor.RGB565) # 选择像素模式 RGB565.
      sensor.set_framesize(sensor.QVGA) # use QQVGA for speed.
      sensor.skip_frames(time = 1000)
      sensor.set_auto_whitebal(False) #关闭白平衡。白平衡是默认开启的,在颜色识别中,需要关闭白平衡。
      sensor.set_auto_gain(False)#关闭自动增益
      clock = time.clock() # Tracks FPS.
      
      ifdata = []#一个列表
      def find_max(blobs):    #定义寻找色块面积最大的函数
          max_size=0
          for blob in blobs:
              if blob.pixels() > max_size:
                  max_blob=blob
                  max_size = blob.pixels()
          return max_blob
      
      
      numbb=200
      while(numbb!=0):
          time.sleep(6)
          sensor.set_auto_exposure(False, 1000)#这里设置曝光时间
          time.sleep(6)
          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([red_threshold_01],roi=(20,20,280,200),x_stride =10,y_stride=10, pixels_threshold=280, area_threshold=200, merge=True, margin=10);      #红色物块
          blobs1 = img.find_blobs([green_threshold_01],roi=(20,20,280,200),x_stride =10,y_stride=10, pixels_threshold=280, area_threshold=200, merge=True, margin=10); #绿色物块
          blobs2 = img.find_blobs([yellow_threshold_01],roi=(20,20,280,200),x_stride =10,y_stride=10, pixels_threshold=280, area_threshold=200, merge=True, margin=10);   #蓝色物块
          cx=0;cy=0;cx1=0;cy1=0;cx2=0;cy2=0;
          
          if blobs1:
              #如果找到了目标lv色
              max_g = find_max(blobs1);
              # Draw a rect around the blob.
              img.draw_rectangle(max_g[0:4]) # rect
              #用矩形标记出目标颜色区域
              img.draw_cross(max_g[5], max_g[6]) # cx, cy
              img.draw_cross(160, 120) # 在中心点画标记
              #在目标颜色区域的中心画十字形标记
              cx=max_g[5];
              cy=max_g[6];
              img.draw_line((160,120,cx,cy), color=(127));
              #img.draw_string(160,120, "(%d, %d)"%(160,120), color=(127));
              img.draw_string(cx, cy, "(%d, %d)"%(cx,cy), color=(127));
              print("绿色")
              
              runData2.insert(3,0x01)
              
              print(hex(runData2[3]))
              
              
              
          elif blobs2:
              #如果找到了目标黄色
              max_y = find_max(blobs2);
              # Draw a rect around the blob.
              img.draw_rectangle(max_y[0:4]) # rect
              #用矩形标记出目标颜色区域
              img.draw_cross(max_y[5], max_y[6]) # cx, cy
              img.draw_cross(160, 120) # 在中心点画标记
              #在目标颜色区域的中心画十字形标记
              cx=max_y[5];
              cy=max_y[6];
              img.draw_line((160,120,cx,cy), color=(127));
              #img.draw_string(160,120, "(%d, %d)"%(160,120), color=(127));
              img.draw_string(cx, cy, "(%d, %d)"%(cx,cy), color=(127));
              print("黄色")
              runData2.insert(3,0x02)
              
             
          elif blobs:
              #如果找到了目标红色
              max_b = find_max(blobs);
              # Draw a rect around the blob.
              img.draw_rectangle(max_b[0:4]) # rect
              #用矩形标记出目标颜色区域
              img.draw_cross(max_b[5], max_b[6]) # cx, cy
              img.draw_cross(160, 120) # 在中心点画标记
              #在目标颜色区域的中心画十字形标记
              cx=max_b[5];
              cy=max_b[6];
              img.draw_line((160,120,cx,cy), color=(127));
              #img.draw_string(160,120, "(%d, %d)"%(160,120), color=(127));
              img.draw_string(cx, cy, "(%d, %d)"%(cx,cy), color=(127));
              print(max_b[4])
              print("红色")
              runData2.insert(3,0x03)
          numbb=numbb-1
          print("exposure == %d" % sensor.get_exposure_us())
          print(numbb)   
          if(runData2[3]==0x01 or runData2[3]==0x02 or runData2[3]==0x03):
              numbb=0
              
            
      numbbb=200
      while(numbbb!=0):
          
           
          sensor.set_auto_exposure(False, 10000)#这里设置曝光时间
          
          numbbb=numbbb-1
          print("exposure == %d" % sensor.get_exposure_us())          
          print("over,over,over,over,over,over,over,over,over,over,over,")
      
      #blob = blobs[0]
      #img_ball_r= calc_radius(blob)
       ## 小球离镜头的距离 根据我们的公式计算
      #ball_distance = K / img_ball_r
      #print("小球距离: %d"%ball_distance)
          
      
      
      
      


    • 卡住的原因是你sleep6秒。把45和47行的sleep删掉。



    • @gnov想调用两个曝光值,但是运行到第二个曝光值的时候摄像头就会卡住 中说:

      而且在第一次曝光值的时候图像的亮暗还有点不一样,想知道在一个程序里面可以调用两次不一样的曝光吗

      这个没太听懂。多次调用set_auto_exposure没有问题。