为啥更改阈值之后就会报错
-
import sensor, image, time,pyb from pyb import UART import json from pyb import LED led1 = pyb.LED(2) led2 = pyb.LED(3) red_threshold = (20, 59, 39, 127, 125, -73) #green_threshold = (23, 35, -23, -39, 10, 25) #blue_threshold = (36, 12, 22, -41, -52, -11) G_X=0 G_Y=0 R_X=0 R_Y=0 Y_X=0 Y_Y=0 G_data=0 R_data=0 Y_data = 0 add_data=0 data=0 sensor.reset() # Initialize the camera sensor. sensor.set_pixformat(sensor.RGB565) # use RGB565. sensor.set_framesize(sensor.QQVGA) # 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. K=5000#the value should be measured uart = UART(3, 115200) uart.init(115200, bits=8, parity=None, stop=1) #8位数据位,无校验位,1位停止位 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 while(True): clock.tick() # Track elapsed milliseconds between snapshots(). img = sensor.snapshot() # Take a picture and return the image. blobs = img.find_blobs([red_threshold],x_stride =15,y_stride = 15) if len(blobs) == 1: # Draw a rect around the blob. b = blobs[0] img.draw_rectangle(b[0:4]) # rect img.draw_cross(b[5], b[6]) # cx, cy Lm = (b[2]+b[3])/2 length = K/Lm if blobs: max_blob = find_max(blobs) #img.draw_cross(max_blob.cx(),max_blob.cy()) #绘制圆外框 img.draw_rectangle(max_blob.rect())#绘制矩形 img.draw_cross(max_blob.cx(), max_blob.cy())#绘制十字 #img.draw_circle(max_blob.cx(),max_blob.cy(),max_blob.cx()-max_blob.x(), color = (168, 11, 133)) R_X =int(max_blob.cx()) R_Y =int(max_blob.cy()) d=int(length) data=bytearray([0xb3,0xb3,R_X,R_Y,d,1,0x5b]) uart.write(data) #打印XY轴的偏移坐标 print("RX轴偏移坐标 : ",R_X) print("RY轴偏移坐标 : ",R_Y) print("距离坐标:",d) #led1.on() #led2.on() else: print("NO FIND") data=bytearray([0xb3,0xb3,0,0,0,0x5b]) uart.write(data) #打印XY轴的偏移坐标 #led1.off() #led2.off()
这是我更改阈值之前的代码,即使找不到需要的颜色也只是会输出no find,
但是只要更改一下阈值import sensor, image, time,pyb from pyb import UART import json from pyb import LED led1 = pyb.LED(2) led2 = pyb.LED(3) red_threshold = (39, 6, -56, -10, 41, 10) #green_threshold = (23, 35, -23, -39, 10, 25) #blue_threshold = (36, 12, 22, -41, -52, -11) G_X=0 G_Y=0 R_X=0 R_Y=0 Y_X=0 Y_Y=0 G_data=0 R_data=0 Y_data = 0 add_data=0 data=0 sensor.reset() # Initialize the camera sensor. sensor.set_pixformat(sensor.RGB565) # use RGB565. sensor.set_framesize(sensor.QQVGA) # 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. K=5000#the value should be measured uart = UART(3, 115200) uart.init(115200, bits=8, parity=None, stop=1) #8位数据位,无校验位,1位停止位 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 while(True): clock.tick() # Track elapsed milliseconds between snapshots(). img = sensor.snapshot() # Take a picture and return the image. blobs = img.find_blobs([red_threshold],x_stride =15,y_stride = 15) if len(blobs) == 1: # Draw a rect around the blob. b = blobs[0] img.draw_rectangle(b[0:4]) # rect img.draw_cross(b[5], b[6]) # cx, cy Lm = (b[2]+b[3])/2 length = K/Lm if blobs: max_blob = find_max(blobs) #img.draw_cross(max_blob.cx(),max_blob.cy()) #绘制圆外框 img.draw_rectangle(max_blob.rect())#绘制矩形 img.draw_cross(max_blob.cx(), max_blob.cy())#绘制十字 #img.draw_circle(max_blob.cx(),max_blob.cy(),max_blob.cx()-max_blob.x(), color = (168, 11, 133)) R_X =int(max_blob.cx()) R_Y =int(max_blob.cy()) d=int(length) data=bytearray([0xb3,0xb3,R_X,R_Y,d,1,0x5b]) uart.write(data) #打印XY轴的偏移坐标 print("RX轴偏移坐标 : ",R_X) print("RY轴偏移坐标 : ",R_Y) print("距离坐标:",d) #led1.on() #led2.on() else: print("NO FIND") data=bytearray([0xb3,0xb3,0,0,0,0x5b]) uart.write(data) #打印XY轴的偏移坐标 #led1.off() #led2.off()
就会出现这个
-
报错很明显了,就是length没定义。为啥没定义呢?当49行的判断为假的时候,就不会执行第55行的。
解决办法:48行添加一行 length=0