import sensor, image, time,pyb
from pyb import UART
uart = UART(3,115200) # 打开串口3
uart.init(115200, bits=8, parity=None, stop=1)
led = pyb.LED(3) # 打开LED指示灯
led.on()
xgain=50
ygain=42
bigBlob = None
Pcircle= None # 背景色块,元组【X,Y,W,H】
Pcircle00= None
Pcircle11= None # 1号rio区域目标点,元组【中心X,中心Y,半径】
Pcircle22= None # 2号rio区域目标点,元组【中心X,中心Y,半径】
Pcircle33= None # 3号rio区域目标点,元组【中心X,中心Y,半径】
Pcircle44= None # 4号rio区域目标点,元组【中心X,中心Y,半径】
Pcircle55= None # 5号rio区域目标点,元组【中心X,中心Y,半径】
Pcircle66= None # 6号rio区域目标点,元组【中心X,中心Y,半径】
Pcircle77= None # 7号rio区域目标点,元组【中心X,中心Y,半径】
Pcircle88= None # 8号rio区域目标点,元组【中心X,中心Y,半径】
Pcircle99= None # 9号rio区域目标点,元组【中心X,中心Y,半径】
W_data=[[0,0,0], # 创建列表,用于串口发送数据,9维列表【检测FLAG,中心X,中心Y】
[0,0,0],
[0,0,0],
[0,0,0],
[0,0,0],
[0,0,0],
[0,0,0],
[0,0,0],
[0,0,0],
[0,0,0],]
thresholds = [(36, 0, -14, 6, -72, 15)]#黑色
thresholds1 = [(95, 46, -128, 27, -127, 6)]#白色
thresholds2 = [(95, 46, -34, 20, 26, 127)]#黄色
sensor.reset() # Initialize the camera sensor.
sensor.set_pixformat(sensor.RGB565) # use RGB565.
sensor.set_framesize(sensor.HQVGA) #240x160 HQVGA
sensor.skip_frames(time=1000) # Let new settings take affect.
sensor.set_auto_gain(False,6) #设置亮度增益must be turned off for color tracking
sensor.set_auto_whitebal(False,(-5.119987, -6.02073, -3.059389))#设置设置红色,绿色和蓝色通道的固定增益分贝。关闭白平衡。白平衡是默认开启的,在颜色识别中,需要关闭白平衡。
clock = time.clock() # Tracks FPS.
# 比较两个色块大小的函数
# 这里我们选择了pixels作为指标比对二者的代码
# 你也可以换用其它指标 例如 blob.area()
def compareBlob(blob1, blob2):
tmp = blob1.pixels() - blob2.pixels()
if tmp == 0:
return 0;
elif tmp > 0:
return 1;
else:
return -1;
while(True):
clock.tick()
img = sensor.snapshot()
#########################找黑色球板####################################
blobs = img.find_blobs(thresholds)
if blobs:
bigBlob = blobs[0]
for blob in blobs:
if compareBlob(bigBlob, blob) == -1:
bigBlob = blob
#Pcircle= bigBlob.rect()
Pcircle=[bigBlob.x()+12,bigBlob.y()+15,bigBlob.w()-15,bigBlob.h()-15]
#####################画图辅助判断可注释##############################
img.draw_rectangle(Pcircle,color=127)
#####################画图辅助判断可注释##############################
###########################预估九个色块所在roi区域####################################
Pcircle1=[Pcircle[0], Pcircle[1], xgain,ygain]
Pcircle2=[Pcircle[0]+xgain, Pcircle[1], xgain,ygain]
Pcircle3=[Pcircle[0]+xgain*2, Pcircle[1], xgain,ygain]
Pcircle4=[Pcircle[0], Pcircle[1]+ygain, xgain,ygain]
Pcircle5=[Pcircle[0]+xgain, Pcircle[1]+ygain, xgain,ygain]
Pcircle6=[Pcircle[0]+xgain*2, Pcircle[1]+ygain, xgain,ygain]
Pcircle4=[Pcircle[0], Pcircle[1]+ygain, xgain,ygain]
Pcircle5=[Pcircle[0]+xgain, Pcircle[1]+ygain, xgain,ygain]
Pcircle6=[Pcircle[0]+xgain*2, Pcircle[1]+ygain, xgain,ygain]
Pcircle7=[Pcircle[0], Pcircle[1]+ygain*2, xgain,ygain]
Pcircle8=[Pcircle[0]+xgain, Pcircle[1]+ygain*2, xgain,ygain]
Pcircle9=[Pcircle[0]+xgain*2, Pcircle[1]+ygain*2, xgain,ygain]
#####################画图辅助判断可注释##############################
img.draw_rectangle(Pcircle1)
img.draw_rectangle(Pcircle2)
img.draw_rectangle(Pcircle3)
img.draw_rectangle(Pcircle4)
img.draw_rectangle(Pcircle5)
img.draw_rectangle(Pcircle6)
img.draw_rectangle(Pcircle7)
img.draw_rectangle(Pcircle8)
img.draw_rectangle(Pcircle9)
#####################画图辅助判断可注释##############################
###########################检测各roi区域色块####################################
################roi1区域###########################
blobs = img.find_blobs(thresholds1,roi=Pcircle1)
if blobs:
bigBlob = blobs[0]
for blob in blobs:
if compareBlob(bigBlob, blob) == -1:
bigBlob = blob
Pcircle11= bigBlob.enclosing_circle()
#####################画图辅助判断可注释##############################
img.draw_circle(Pcircle11)
img.draw_cross(Pcircle11[0], Pcircle11[1])
#####################画图辅助判断可注释##############################
W_data[0][0]=1;
W_data[0][1]=Pcircle11[0];
W_data[0][2]=Pcircle11[1];
else:
W_data[0][0]=0;
################roi2区域###########################
blobs = img.find_blobs(thresholds1,roi=Pcircle2)
if blobs:
bigBlob = blobs[0]
for blob in blobs:
if compareBlob(bigBlob, blob) == -1:
bigBlob = blob
Pcircle22= bigBlob.enclosing_circle()
#####################画图辅助判断可注释##############################
img.draw_circle(Pcircle22)
img.draw_cross(Pcircle22[0], Pcircle22[1])
#####################画图辅助判断可注释##############################
W_data[1][0]=1;
W_data[1][1]=Pcircle22[0];
W_data[1][2]=Pcircle22[1];
else:
W_data[1][0]=0;
################roi3区域###########################
blobs = img.find_blobs(thresholds1,roi=Pcircle3)
if blobs:
bigBlob = blobs[0]
for blob in blobs:
if compareBlob(bigBlob, blob) == -1:
bigBlob = blob
Pcircle33= bigBlob.enclosing_circle()
#####################画图辅助判断可注释##############################
img.draw_circle(Pcircle33)
img.draw_cross(Pcircle33[0], Pcircle33[1])
#####################画图辅助判断可注释##############################
W_data[2][0]=1;
W_data[2][1]=Pcircle33[0];
W_data[2][2]=Pcircle33[1];
else:
W_data[2][0]=0;
################roi4区域###########################
blobs = img.find_blobs(thresholds1,roi=Pcircle4)
if blobs:
bigBlob = blobs[0]
for blob in blobs:
if compareBlob(bigBlob, blob) == -1:
bigBlob = blob
Pcircle44= bigBlob.enclosing_circle()
#####################画图辅助判断可注释##############################
img.draw_circle(Pcircle44)
img.draw_cross(Pcircle44[0], Pcircle44[1])
#####################画图辅助判断可注释##############################
W_data[3][0]=1;
W_data[3][1]=Pcircle44[0];
W_data[3][2]=Pcircle44[1];
else:
W_data[3][0]=0;
################roi5区域###########################
blobs = img.find_blobs(thresholds1,roi=Pcircle5)
if blobs:
bigBlob = blobs[0]
for blob in blobs:
if compareBlob(bigBlob, blob) == -1:
bigBlob = blob
Pcircle55= bigBlob.enclosing_circle()
#####################画图辅助判断可注释##############################
img.draw_circle(Pcircle55)
img.draw_cross(Pcircle55[0], Pcircle55[1])
#####################画图辅助判断可注释##############################
W_data[4][0]=1;
W_data[4][1]=Pcircle55[0];
W_data[4][2]=Pcircle55[1];
else:
W_data[4][0]=0;
################roi6区域###########################
blobs = img.find_blobs(thresholds1,roi=Pcircle6)
if blobs:
bigBlob = blobs[0]
for blob in blobs:
if compareBlob(bigBlob, blob) == -1:
bigBlob = blob
Pcircle66= bigBlob.enclosing_circle()
#####################画图辅助判断可注释##############################
img.draw_circle(Pcircle66)
img.draw_cross(Pcircle66[0], Pcircle66[1])
#####################画图辅助判断可注释##############################
W_data[5][0]=1;
W_data[5][1]=Pcircle66[0];
W_data[5][2]=Pcircle66[1];
else:
W_data[5][0]=0;
################roi7区域###########################
blobs = img.find_blobs(thresholds1,roi=Pcircle7)
if blobs:
bigBlob = blobs[0]
for blob in blobs:
if compareBlob(bigBlob, blob) == -1:
bigBlob = blob
Pcircle77= bigBlob.enclosing_circle()
#####################画图辅助判断可注释##############################
img.draw_circle(Pcircle77)
img.draw_cross(Pcircle77[0], Pcircle77[1])
#####################画图辅助判断可注释##############################
W_data[6][0]=1;
W_data[6][1]=Pcircle77[0];
W_data[6][2]=Pcircle77[1];
else:
W_data[6][0]=0;
################roi8区域###########################
blobs = img.find_blobs(thresholds1,roi=Pcircle8)
if blobs:
bigBlob = blobs[0]
for blob in blobs:
if compareBlob(bigBlob, blob) == -1:
bigBlob = blob
Pcircle88= bigBlob.enclosing_circle()
#####################画图辅助判断可注释##############################
img.draw_circle(Pcircle88)
img.draw_cross(Pcircle88[0], Pcircle88[1])
#####################画图辅助判断可注释##############################
W_data[7][0]=1;
W_data[7][1]=Pcircle88[0];
W_data[7][2]=Pcircle88[1];
else:
W_data[7][0]=0;
################roi9区域###########################
blobs = img.find_blobs(thresholds1,roi=Pcircle9)
if blobs:
bigBlob = blobs[0]
for blob in blobs:
if compareBlob(bigBlob, blob) == -1:
bigBlob = blob
Pcircle99= bigBlob.enclosing_circle()
#####################画图辅助判断可注释##############################
img.draw_circle(Pcircle99)
img.draw_cross(Pcircle99[0], Pcircle99[1])
#####################画图辅助判断可注释##############################
W_data[8][0]=1;
W_data[8][1]=Pcircle99[0];
W_data[8][2]=Pcircle99[1];
else:
W_data[8][0]=0;
################小球区域###########################
blobs = img.find_blobs(thresholds2,roi=Pcircle)
if blobs:
bigBlob = blobs[0]
for blob in blobs:
if compareBlob(bigBlob, blob) == -1:
bigBlob = blob
Pcircle00= bigBlob.enclosing_circle()
#####################画图辅助判断可注释##############################
img.draw_circle(Pcircle00)
img.draw_cross(Pcircle00[0], Pcircle000[1])
#####################画图辅助判断可注释##############################
W_data[9][0]=1;
W_data[9][1]=Pcircle00[0];
W_data[9][2]=Pcircle00[1];
else:
W_data[9][0]=0;
img_data = bytearray( [0x5a,
W_data[0][0], W_data[0][1], W_data[0][2],
W_data[1][0], W_data[1][1], W_data[1][2],
W_data[2][0], W_data[2][1], W_data[2][2],
W_data[3][0], W_data[3][1], W_data[3][2],
W_data[4][0], W_data[4][1], W_data[4][2],
W_data[5][0], W_data[5][1], W_data[5][2],
W_data[6][0], W_data[6][1], W_data[6][2],
W_data[7][0], W_data[7][1], W_data[7][2],
W_data[8][0], W_data[8][1], W_data[8][2],
# W_data[9][0], W_data[9][1], W_data[9][2],
0x5b])
uart.write(img_data)
#####################打印辅助判断可注释##############################
print( [W_data[0][0], W_data[0][1], W_data[0][2]],
[W_data[1][0], W_data[1][1], W_data[1][2]],
[W_data[2][0], W_data[2][1], W_data[2][2]],
[W_data[3][0], W_data[3][1], W_data[3][2]],
[W_data[4][0], W_data[4][1], W_data[4][2]],
[W_data[5][0], W_data[5][1], W_data[5][2]],
[W_data[6][0], W_data[6][1], W_data[6][2]],
[W_data[7][0], W_data[7][1], W_data[7][2]],
[W_data[8][0], W_data[8][1], W_data[8][2]],
# [W_data[8][0], W_data[8][1], W_data[8][2]]
)
#####################打印辅助判断可注释##############################
led.toggle()#LED闪烁
1
1q2g
@1q2g
0
声望
1
楼层
215
资料浏览
0
粉丝
0
关注
1q2g 发布的帖子
-
前九个兴趣区找点都能找到,最后一个兴趣区找不同的一种颜色的时候,无法识别,后面程序也不再运行