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



    • while(True):
          clock.tick() # Track elapsed milliseconds between snapshots().
          img = sensor.snapshot() # 从感光芯片获得一张图像
          blobs = img.find_blobs([green_threshold])
          #find_blobs(thresholds, invert=False, roi=Auto),thresholds为颜色阈值,
          #是一个元组,需要用括号[ ]括起来。invert=1,反转颜色阈值,invert=False默认
          #不反转。roi设置颜色识别的视野区域,roi是一个元组, roi = (x, y, w, h),代表
          #从左上顶点(x,y)开始的宽为w高为h的矩形区域,roi不设置的话默认为整个图像视野。
          #这个函数返回一个列表,[0]代表识别到的目标颜色区域左上顶点的x坐标,[1]代表
          #左上顶点y坐标,[2]代表目标区域的宽,[3]代表目标区域的高,[4]代表目标
          #区域像素点的个数,[5]代表目标区域的中心点x坐标,[6]代表目标区域中心点y坐标,
          #[7]代表目标颜色区域的旋转角度(是弧度值,浮点型,列表其他元素是整型),
          #[8]代表与此目标区域交叉的目标个数,[9]代表颜色的编号(它可以用来分辨这个
          #区域是用哪个颜色阈值threshold识别出来的)。
          if blobs:
          #如果找到了目标颜色
              for b in blobs:
              #迭代找到的目标颜色区域
                  if(b[2]>x):
                      x = b[2]
                      jz_maxa = b
                   # Draw a rect around the blob.
              #print("12")
              #print(jz_maxa)
              img.draw_rectangle(jz_maxa[0:4]) # rect
              #print(jz_maxa[0:4])
              #print(jz_maxa[7])
                  #用矩形标记出目标颜色区域
              img.draw_cross(jz_maxa[5], jz_maxa[6]) # cx, cy
                 # 获取旋转角度(弧度)
              rotation_angle_rad = jz_maxa[7]
      
              # 将弧度转换为角度
              rotation_angle_deg = math.degrees(rotation_angle_rad)
              #rotated_img = img.copy()
              #rotated_img.rotation_corr(x_rotation=0, y_rotation=0, z_rotation=rotation_angle_deg, roi=(jz_maxa[0], jz_maxa[1], jz_maxa[2], jz_maxa[3]))
              img.rotation_corr(x_rotation=0, y_rotation=0, z_rotation=math.degrees(jz_maxa[7]),corners=[(jz_maxa[0],jz_maxa[1]),(jz_maxa[0]+jz_maxa[2],jz_maxa[1]),(jz_maxa[0]+jz_maxa[2],jz_maxa[1]+jz_maxa[3]),(jz_maxa[0],jz_maxa[1]+jz_maxa[3])])
              #img.rotation_corr(x_rotation=0, y_rotation=0, z_rotation=jz_maxa[7])
      
              #img = img.copy(roi=(jz_maxa[0],jz_maxa[1],jz_maxa[2],jz_maxa[3]))
              # 默认设置只是进行一次检测...更改它们以搜索图像...
              for obj in tf.classify(net , img, min_scale=1.0, scale_mul=0.5, x_overlap=0.0, y_overlap=0.0):   # 图像分类函数,参数(模型,图像,检测框,重叠度,x,y开始的点)
              #print("**********\nTop 1 Detect,ions at [x=%d,y=%d,w=%d,h=%d]" % obj.rect())
                  sorted_list = sorted(zip(labels, obj.output()), key = lambda x: x[1], reverse = True)
                  # 打印准确率最高的结果
                  for i in range(1):
                      print("%s = %f" % (sorted_list[i][0], sorted_list[i][1]))
              jz_maxa = 0
              x = 0
              time.sleep(0.1)
      
      ```我的代码如上,我想把识别到的色块矫正,但实际效果却非常不正常,该如何改进


    • 提供实际的图片。



    • 0_1685615787029_potato (1).jpg



    • 这个值是根据形状,拟合一个椭圆的方向。对于长条形的比较准。