智能送药小车(一)——K210巡线

智能送药小车

  • K210 颜色识别
  • K210 找出最大色块


K210 颜色识别

这部分基本就是例程上的内容,添加了一点注释。关于相关的运用到的函数解释,可以参考K210颜色识别.

import sensor,lcd,time

#摄像头初始化
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_vflip(1) #后置模式,所见即所得

#lcd初始化
lcd.init()

clock=time.clock()

# 颜色识别阈值 (L Min, L Max, A Min, A Max, B Min, B Max) LAB模型
# 可以根据工具中的阈值编辑器选取阈值
# L 代表亮度(0-100) A 表示红色到绿色的范围(-128绿 - 128红) B 表示黄色到蓝色的范围(-128蓝 - 128黄)
thresholds = [(30, 100, 15, 127, 15, 127), # 红色阈值
              (30, 100, -64, -8, -32, 32), # 绿色阈值
              (0, 30, 0, 64, -128, -20)] # 蓝色阈值


while True:

    clock.tick()

    img=sensor.snapshot()

    blobs = img.find_blobs([thresholds[0]]) # 0,1,2分别表示红,绿,蓝色。
    if blobs:
        for b in blobs:
            # 圈出色块
            tmp=img.draw_rectangle(b[0:4])
            tmp=img.draw_cross(b[5], b[6])
            # 打印色块中心点坐标
            print("x = %d y = %d", b[5], b[6])


    lcd.display(img)     #LCD显示图片
    #print(clock.fps())   #打印FPS

K210 找出最大色块

import sensor,image,lcd,time

#常用初始化
lcd.init()
sensor.reset()                      #复位摄像头
sensor.set_pixformat(sensor.RGB565) #设置像素格式 RGB565
sensor.set_framesize(sensor.QVGA)   #设置帧尺寸 QVGA (320x240)
sensor.skip_frames(time = 2000)     #跳过不稳定画面

#红色阈值
red_threshold = (0, 100, 15, 127, 15, 127)


#寻找最大色块函数定义
def find_max(blobs):
    max_size=0
    for blob in blobs:
        if blob[4] > max_size:
            max_blob=blob
            max_size = blob[4]
    return max_blob

while True:
    img=sensor.snapshot()
    blobs = img.find_blobs([red_threshold],merge=True)

    if blobs:
        max_blob = find_max(blobs)#调用函数,返回最大色块
    
    # 圈出最大色块,标记中心位置,写明中心坐标 
    img.draw_rectangle(max_blob[0:4], color=(0,0,0)) #用黑色框出最大色块
    img.draw_cross(max_blob[5], max_blob[6])
    img.draw_string(max_blob.x(),max_blob.y(), (str(max_blob.cx())+','+str(max_blob.cy())), color = (0,0,0))
    print("x = %d y = %d", max_blob[5], max_blob[6])
    lcd.display(img)

你可能感兴趣的:(单片机,自动驾驶,嵌入式硬件)