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



    • import sensor, image, time
      
      
      black_threshold  = (   -15,   25,  -26,   14,   -15,   25)
      white_threshold  = (    45,   86,  -26,   11,   -15,   25)
      
      sensor.reset() # 初始化摄像头传感器
      sensor.set_pixformat(sensor.RGB565) # 使用 RGB565 彩图
      sensor.set_framesize(sensor.QQVGA) # 使用 QQVGA 分辨率
      sensor.skip_frames(10) #跳过几帧,让新的设置生效。
      sensor.set_auto_whitebal(False) # 因为是颜色识别,所以需要把白平衡关闭
      clock = time.clock() # 追踪帧率,影响不大
      #__________________________________________________________________
      #定义寻找最大色块的函数,因为图像中有多个色块,所以追踪最大的那个
      def find_max(blobs):
          max_size=0
          for blob in blobs:
              if blob[2]*blob[3] > max_size:
                  max_blob=blob
                  max_size = blob[2]*blob[3]
          return max_blob
      #__________________________________________________________________
      while(True):
      	clock.tick() # 跟踪快照()之间经过的毫秒数。
      	img = sensor.snapshot().lens_corr(1.8) # 截取一张图片
      	
      	left_roi = (20,20,160,80)
      	blobs = img.find_blobs([black_threshold],roi=left_roi)  #识别黑色阈值
      	max_blob = find_max(blobs)  #调用上面自定义函数,找到最大色块
      	img.draw_rectangle((max_blob.x(), max_blob.y(), max_blob.w(), max_blob.h()), color = (255, 0, 0), thickness=2)
      	max_blob.x()  #返回识别区域左上角的x坐标
      	max_blob.y()  #返回识别区域左上角的y坐标
      	max_blob.w()  #返回识别区域的宽度
      	max_blob.h()  #返回识别区域的长度
      	print(max_blob.x(),max_blob.y())
      	
      	right_roi = (30,10,90,90)
      	blobs = img.find_blobs([white_threshold],roi=right_roi)  #识别黑色阈值
      	max_blobs = find_max(blobs)  #调用上面自定义函数,找到最大色块
      	img.draw_rectangle((max_blobs.x(), max_blobs.y(), max_blobs.w(), max_blobs.h()), color = (0, 255, 0), thickness=2)
      	max_blobs.x()  #返回识别区域左上角的x坐标
      	max_blobs.y()  #返回识别区域左上角的y坐标
      	max_blobs.w()  #返回识别区域的宽度
      	max_blobs.h()  #返回识别区域的长度
      	print(max_blobs.x(),max_blobs.y())
      

      0_1691079164116_5547bb63-7fca-4748-a760-246a333b539a-1691079121445.jpg



    • 29行39行,find_max上面加一句if blobs:

      另外,39行draw_rectangle后画面就变了,会影响38行的find_blobs



    • import sensor, image, time
      
      
      black_threshold  = (   -15,   25,  -26,   14,   -15,   25)
      white_threshold  = (    45,   86,  -26,   11,   -15,   25)
      
      sensor.reset() # 初始化摄像头传感器
      sensor.set_pixformat(sensor.RGB565) # 使用 RGB565 彩图
      sensor.set_framesize(sensor.QQVGA) # 使用 QQVGA 分辨率
      sensor.skip_frames(10) #跳过几帧,让新的设置生效。
      sensor.set_auto_whitebal(False) # 因为是颜色识别,所以需要把白平衡关闭
      clock = time.clock() # 追踪帧率,影响不大
      #__________________________________________________________________
      #定义寻找最大色块的函数,因为图像中有多个色块,所以追踪最大的那个
      def find_max(blobs):
          max_size=0
          for blob in blobs:
              if blob[2]*blob[3] > max_size:
                  max_blob=blob
                  max_size = blob[2]*blob[3]
          return max_blob
      #__________________________________________________________________
      while(True):
      	clock.tick() # 跟踪快照()之间经过的毫秒数。
      	img = sensor.snapshot().lens_corr(1.8) # 截取一张图片
      	
      	left_roi = (20,20,160,80)
      	blobs = img.find_blobs([black_threshold],roi=left_roi)  #识别黑色阈值
      	if blobs:
              max_blob = find_max(blobs)  #调用上面自定义函数,找到最大色块
              #img.draw_rectangle((max_blob.x(), max_blob.y(), max_blob.w(), max_blob.h()), color = (255, 0, 0), thickness=2)
              max_blob.x()  #返回识别区域左上角的x坐标
              max_blob.y()  #返回识别区域左上角的y坐标
              max_blob.w()  #返回识别区域的宽度
              max_blob.h()  #返回识别区域的长度
              print(max_blob.x(),max_blob.y())
      	'''
      	right_roi = (30,10,90,90)
      	blobs = img.find_blobs([white_threshold],roi=right_roi)  #识别黑色阈值
      	max_blobs = find_max(blobs)  #调用上面自定义函数,找到最大色块
      	#img.draw_rectangle((max_blobs.x(), max_blobs.y(), max_blobs.w(), max_blobs.h()), color = (0, 255, 0), thickness=2)
      	max_blobs.x()  #返回识别区域左上角的x坐标
      	max_blobs.y()  #返回识别区域左上角的y坐标
      	max_blobs.w()  #返回识别区域的宽度
      	max_blobs.h()  #返回识别区域的长度
      '''
      

      但是我又出现这个错误了

      0_1691123721350_4a825460-65b1-4a54-84f3-4eb69265e4d3-image.png



    • @kidswong999 大佬,但是还是有问题



    • 缩进不对。你得自己看懂代码再改。