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))
错误显示无法拷贝到缓存,可是我设置的缓存区大小是320*240的,截取的图片是要小于这个大小的。我用img.save可是用,能够保存到本地,但是copy就不行,想请教一下原因,错误在哪里。谢谢各位!
-
我希望达成的效果是在当前的IMG中截取我需要的部分作为新的img,并代替原来的在帧缓存区显示
-
https://docs.singtown.com/micropython/zh/latest/openmvcam/library/omv.image.html#image.copy
截取的图像再小一些试试。
-
这个我也没见过,我问了一下。
http://forums.openmv.io/viewtopic.php?f=6&t=886不过这个resize应该没有什么意义。。。framebuffer所占用的内存是单独分割出来的,变小也没用。几乎所有的函数都有roi参数。
-
@yuan 我用SAVE保存的截取的图像我看了以下是50KB,介绍里不是说有大得多的空间吗,这个函数应该是把帧缓冲区的图像替换吧?如果是替换的话,应该不能是内存不够的原因吧
-
@kidswong999 这个copy函数当True的时候是吧拷贝的部分直接替换帧缓冲区还是要先保存副本到堆,再第二步替换帧缓冲区的图像