通过颜色和形状识别 识别圆的个数问题
-
我先通过颜色阈值 二值化图像,然后去用find_circles想去识别圆形,然后再得到圆形数量。因为find_circles函数不太准确,数值出现波动,所以我想用 找到数量最多的那个值,作为圆形的数量。但为啥每次while它都会把数据清空啊 ?是因为我这个是局部变量?感觉是python 没学好。求教。
import sensor, image, time red_threshold = ((0, 33, 12, 72, -89, 73)) ensor.reset() # 初始化摄像头 sensor.set_pixformat(sensor.RGB565) # 格式为 RGB565. sensor.set_framesize(sensor.QQVGA) # 使用 QQVGA 速度快一些 sensor.skip_frames(time = 2000) # 跳过2000s,使新设置生效,并自动调节白平衡 sensor.set_auto_gain(False) # 关闭自动自动增益。默认开启的,在颜色识别中,一定要关闭白平衡。 sensor.set_auto_whitebal(False) #关闭白平衡。白平衡是默认开启的,在颜色识别中,一定要关闭白平衡。 sensor.set_gainceiling(8) clock = time.clock() # 追踪帧率 def find_max(cs): max_num= 0 num_y = 0 for c in cs: num_y += 1 if num_y > max_num: max_num = num_y return max_num while(True): clock.tick() # Track elapsed milliseconds between snapshots(). img = sensor.snapshot().lens_corr(1.8) # 从感光芯片获得一张图像 img.histeq(adaptive=True, clip_limit=3) img.median(1, percentile=0.5) # 图像锐化 img.laplacian(1, sharpen=True) #图像二值化 img.binary([red_threshold]) cs = img.find_circles(x_stride=2, y_stride=2,threshold = 4600, x_margin = 10, y_margin = 10, r_margin = 10,r_min = 5, r_max = 50, r_step = 2) if cs: max_cs = find_max(cs) print(max_cs)
-
len(cs)就是圆的数量。find_max应该是找最大的圆,但是你的这个find_max我看不懂。
-
你应该定义一个全局变量。
max_cs = 0 while True: img = sensor.snapshot() cs = img.find_circles() if len(cs)>max_cs : max_cs = cs print(max_cs)
-
@kidswong999 我是因为在while(True)循环里,图像一直在刷新,导致find_circles()出来的圆的个数 一直在波动,然后我要给出一个稳定不变的圆的个数,通过find_max函数找到识别圆个数的最多的那一次为圆的个数。
-
@zik3 所以要用我上面的代码。不要用find_max函数,