openmv识别红色色块 每帧识别到的数据不同 正方形框跳动 有什么办法可以解决吗
-
import json from pid import PID from pyb import UART from pyb import LED import display uart = UART(3, 115200) red_threshold = (31, 54, 32, 61, 6, 22) red_threshold2 = (20, 72, 20, 75, -59, -1) red_threshold3 = (21, 40, 11, 50, -25, 6) LED(1).on() #开灯 LED(2).on() LED(3).on() #base_pid = PID(p=0.07, i=0, imax=90) #脱机运行或者禁用图像传输,使用这个PID #rArm_pid = PID(p=0.05, i=0, imax=90) #脱机运行或者禁用图像传输,使用这个PID #fArm_pid = PID(p=0.05, i=0, imax=90) base_pid = PID(p=0.1, i=0, imax=90)#在线调试使用这个PID rArm_pid= PID(p=0.1, i=0, imax=90)#在线调试使用这个PID fArm_pid = PID(p=0.05, i=0, imax=90) cmd='n' sensor.reset() # 初始化sensor sensor.set_pixformat(sensor.RGB565) # use RGB565. sensor.set_framesize(sensor.QQVGA2) # use QQVGA for speed. sensor.skip_frames(10) # Let new settings take affect. sensor.set_auto_whitebal(False) # turn this off. clock = time.clock() # Tracks FPS. lcd = display.SPIDisplay() def find_max(blobs): max_size=0 for blob in blobs: if blob[2]*blob[3] > max_size: max_blob=blob max_size = blob[2]*blob[3] return max_blob img = sensor.snapshot() # Take a picture and return the image. while(True): lcd.write(sensor.snapshot()) # 拍照并显示图像。 clock.tick() # Track elapsed milliseconds between snapshots(). blobs = img.find_blobs([red_threshold,red_threshold2,red_threshold3],x_stride=100,y_stride=50) if blobs: uart.write('f') cmd='f' print('you send:','find') area_target=14000 data=[] max_blob = find_max(blobs) base_error = max_blob.cx()-img.width()/2 #base rArm_error = max_blob.cy()-img.height()/2 #rArm img.draw_rectangle(max_blob.rect()) # rect img.draw_cross(max_blob.cx(), max_blob.cy()) # cx, cy for blob in blobs: area = blob.area() fArm_error=area_target-area #fArm #print("fArm_error: ", fArm_error) fArm_output=fArm_pid.get_pid(fArm_error,1)/200 base_output=base_pid.get_pid(base_error,1)/2 rArm_output=rArm_pid.get_pid(rArm_error,1) #print("fArm_output",fArm_output) #print("tilt_output",tilt_output) data.append((base_output,rArm_output,fArm_output)) #data_out = json.dumps(set(data)) #uart.write(data_out +'\n') #print('you send:',data_out) #uart.write(str(pan_output)+'\n') #与上面的output相对应 输出 #uart.write(str(tilt_output)+'\n') #与上面的output相对应 输出 else: uart.write('n') print('you send:','no') 请在这里粘贴代码
-
-
应该是阈值不对,你为什么有三个红色的阈值?