我先通过颜色阈值 二值化图像,然后去用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)