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



    • ####导入库函数
      import sensor, time, image, pyb
      ####传感器复位
      sensor.reset()
      
      # 传感器设置
      sensor.set_contrast(3)             #设置相机对比度
      sensor.set_gainceiling(16)         #设置相机增益上限为16
      sensor.set_framesize(sensor.QVGA)  #设置缓冲区大小为320*240
      sensor.set_windowing((310,240))   #设置显示屏大小为320*240
      sensor.set_pixformat(sensor.GRAYSCALE) #设置为灰度模式
      sensor.set_auto_gain(False, value=100)  #禁用自动增益,强迫增益值为100
      sensor.skip_frames(time = 1000)       #设置延时以应用设置
      
      clock = time.clock()
      num=0
      lastnum=0
      numeanmax=0
      judge=0
      i=0
      sumnum=0
      qiu=7
      check=0
      a=0
      b=0
      r=0
      
      
      while (True):
       clock.tick()
      
       ######## 循环滤波图像处理
       high_threshold = (160, 255)                        #二值化范围
       img = sensor.snapshot()
       img.gaussian(1)                                    #模糊滤波
       img.binary([high_threshold])                       #二值化
       img.erode(4)
      ############找到圆形,确定中心,确定截取范围
       for c in img.find_circles(threshold = 25000, x_margin = 10, y_margin = 10, r_margin = 70,r_min = 70, r_max =100, r_step = 2):
           img.draw_circle(c.x(), c.y(), c.r(), color = (255, 0, 0))
           print(c[0],c[1],c[2])
           a=c[0]
           b=c[1]
           aw=2*min(a,b,240-b,310-a)
           ah=2*min(a,b,240-b,310-a)
           ax=a-int(aw/2)
           ay=b-int(ah/2)
           roi=(ax,ay,aw,ah)
           img.draw_rectangle(ax,ay,aw,ah,color=(0),thickness=2)
      
       high_threshold = (160, 255)                        #二值化范围
       img = sensor.snapshot()
       img.median(1, percentile=0.6)                      #中值滤波
       img.gaussian(1)                                    #模糊滤波
       img.binary([high_threshold])                       #二值化
       img.dilate(4)
      # img.save('image/',roi,quality=50)
       img.copy(roi,copy_to_fb=(True))
      

      0_1533277323423_对对对.png

      错误显示无法拷贝到缓存,可是我设置的缓存区大小是320*240的,截取的图片是要小于这个大小的。我用img.save可是用,能够保存到本地,但是copy就不行,想请教一下原因,错误在哪里。谢谢各位!



    • 我希望达成的效果是在当前的IMG中截取我需要的部分作为新的img,并代替原来的在帧缓存区显示




    • 这个我也没见过,我问了一下。
      http://forums.openmv.io/viewtopic.php?f=6&t=886

      不过这个resize应该没有什么意义。。。framebuffer所占用的内存是单独分割出来的,变小也没用。几乎所有的函数都有roi参数。



    • @yuan 我用SAVE保存的截取的图像我看了以下是50KB,介绍里不是说有大得多的空间吗,这个函数应该是把帧缓冲区的图像替换吧?如果是替换的话,应该不能是内存不够的原因吧



    • @kidswong999 这个copy函数当True的时候是吧拷贝的部分直接替换帧缓冲区还是要先保存副本到堆,再第二步替换帧缓冲区的图像