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



    • openmv串口检测到数据,现在为了确保数据的稳定性,我想把十个数放到一个数组中,然后通过串口向单片机发送,我写好时候为什么只返回0,并没有我想要的坐标值

      import sensor, image, time
      
      from pyb import UART
      
      uart = UART(3, 19200)
      
      uart.init(4800, bits=8, parity=None, stop=1, timeout_char=1000)
      
      
      target_threshold   = (58, 76, -13, 8, -84, 70)
      
      ball_threshold =(58, 76, -13, 8, -84, 70)#待修改
      
      sensor.reset()
      
      sensor.set_pixformat(sensor.RGB565)
      
      sensor.set_framesize(sensor.QQVGA)
      
      sensor.skip_frames(10)
      
      sensor.set_auto_whitebal(False)
      
      clock = time.clock()
      
      
      def find_c(threshold,roi):
      
           number=0
           blobs = img.find_blobs(threshold,roi=roi,x_stride=10, y_stride=50)
      
           for b in blobs:
      
               max_size=0
      
               if b[2]*b[3] > max_size:
      
                   max_size1 = b[2]*b[3]
      
                   if max_size1>2000:
      
                       max_size1=max_size1
      
                       img.draw_rectangle(b[0:4], color = (0, 0, 0))
      
                       img.draw_cross(b[5], b[6], color = (0, 0, 0))
                       number=b[5]
      
           return number
      
      def delay(a):
          for i in range (1000):
              if i==999:
                  uart.write(a)
      
      
      def average_zhi(num,n):
          sum=0
          a=[]
          i=0
          if num:
              a=[]
              a.append(num)
              i=i+1
              if i==n-1:
                  a.sort()
                  for i in a[1,b-1]:
                      sum=sum+i
                      c=b-2
                      sum=int(sum/c)
                      
          return sum
                      
      
      
      while(True):
               
               clock.tick()
               
               img = sensor.snapshot()
               
               roi1=[0,0,70,60]
               
               roi2=[90,0,60,60]
               
               roi_ball=[0,0,160,60]#待修改
               
               blobs1 = img.find_blobs([target_threshold],roi=roi1,x_stride=10, y_stride=50)
               
               blobs2 = img.find_blobs([target_threshold],roi=roi2,x_stride=10, y_stride=50)
               
               blobs_blob = img.find_blobs([ball_threshold],roi=roi_ball)
               if blobs1 and blobs2:
               
                   
                   
                       
                       
                   first_number=find_c([target_threshold],roi1)
      
                   second_number=find_c([target_threshold],roi2)
      
                   average_number=(first_number+second_number)/2
      
                   average_number=int(average_number)
                   average=average_zhi(average_number,10)
                      
                   print(average)
      


    • 你的这个逻辑有问题啊

      def find_c(threshold,roi):
      
           number=0
           blobs = img.find_blobs(threshold,roi=roi,x_stride=10, y_stride=50)
      
           for b in blobs:
      
               max_size=0
      
               if b[2]*b[3] > max_size:
      
                   max_size1 = b[2]*b[3]
      
                   if max_size1>2000:
      
                       max_size1=max_size1
      
                       img.draw_rectangle(b[0:4], color = (0, 0, 0))
      
                       img.draw_cross(b[5], b[6], color = (0, 0, 0))
                       number=b[5]
      
           return number
      

      既然 max_size一直是0,
      那if b[2]*b[3] > max_size岂不是一直成立

      关键max_size1>2000 number才变。

      所以这个函数返回0喽。



    • @kidswong999

      def average_zhi(num,n):
          sum=0
          a=[]
          i=0
          if num:
              a=[]
              a.append(num)
              i=i+1
              if i==n-1:
                  a.sort()
                  for i in a[1,b-1]:
                      sum=sum+i
                      c=b-2
                      sum=int(sum/c)
                      
          return sum
      
      

      这个代码有问题吗



    • @kidswong999 这个代码主要是对数据进行处理的



    • 我又不知道你的代码要做什么,没法判断。

      你要自己测试一下。



    • @kidswong999 我想用这个代码对返回的十个坐标点数据进行加工处理,返回这是个数的平均值