一、LCD屏幕
基础知识:
构造函数:
lcd.init(type=1, freq=15000000, color=lcd.BLACK):
功能:初始化lcd
· type:lcd类型;
· freq:通信频率;
· color:LCD初始化的颜色。
使用方法:
lcd.deinit():
功能:注销lcd驱动,释放IO引脚。
lcd.clear(color):
功能:填充指定颜色。默认黑色。
lcd.draw_string(x, y, str, color, bg_color):
功能:写字符。
· [x,y]:起始坐标;
· str:字符内容;
· color:字符颜色;
· bg_color:背景颜色。
lcd.display(image, roi=Auto):
功能:显示图片。
· image:RGB565或GRAYSCALE(灰度)图片;
· roi:显示的感兴趣区域,未指定为图像大小。
lcd.rotation(dir):
功能:LCD屏幕方向设定。
· dir:取值范围[0, 3],从0到3依顺时针旋转
lcd.mirror(invert):
功能:镜面显示。
· invert:=True则为镜面显示;False则否
基础实验:在屏幕上显示字符:
# 使用putty运行,可以很好的看出每一步的运行结果
import lcd # 引入lcd模块
lcd.init() # 初始化lcd,没有参数填入即全部为默认值,执行此步后屏幕变黑
lcd.clear(lcd.WHITE) # 将LCD屏幕变为白色,即将整个屏幕填充为白色
lcd.draw_string(110, 120, "Hello,K210!", lcd.BLACK, lcd.WHITE) # 绘制字符Hello,K210!,字符为黑色,背景为白色
二、sensor(摄像头)
sensor基础知识:
构造函数:sensor
摄像头对象,通过import直接调用
使用方法:
sensor.reset():
功能:初始化摄像头。
sensor.set_pixformat(pixformat):
功能:设置像素格式。pixformat有三个参数。
· sensor.GRAYSCAL:灰度图像,每像素8位(1字节),处理速度快
· sensor.RGB565:每像素16位(2字节),5位红,6位绿,5位蓝,处理较慢
sensor.set_framesize(framesize):
功能:设置每帧大小(即图像尺寸)。常用的framesize参数有下面这些:
· sensor.QQVGA:160*120;
· sensor.QVGA:320*240;
· sensor.VGA:640*480。
sensor.skip_frames([n, time]):
功能:摄像头设置后跳过n帧或等待时间time让其稳定。
· n:跳过帧数;
· time:等待时间,单位ms。
· 若均每指定,则默认跳过300ms的帧。
sensor.snapshot():
功能:使用相机拍摄一张照片,并返回image对象。
sensor.set_vflip(enable):
功能:设置镜头垂直翻转。
· enable:1为启动,0为不启动。
clock模块基础知识:
构造函数:
clock=time.clock():
功能:创建一个时钟。
使用方法:
clock.tick():
功能:开始追踪运行随时间。
clock.fps():
功能:停止追踪运行时间,并返回当前FPS(每秒帧数)。
在调用该函数时始终首先调用tick。
基础实验:显示摄像头拍摄的实时FPS
# 使用摄像头测量帧率
import lcd # 引入lcd模块
import sensor # 引入摄像头模块
import time # 引入时间模块
import image # 引入机器视觉模块
lcd.init() # 初始化lcd模块
sensor.reset() # 初始化摄像头
sensor.set_vflip(1) # 设置摄像头位后置模式,所见即所得
sensor.set_pixformat(sensor.RGB565) # 设置像素格式为彩色
sensor.set_framesize(sensor.QVGA) # 设置帧格式为QVGA,320*240
sensor.skip_frames() # 等待摄像头稳定,跳过一系列不稳定的值
clock = time.clock() # 创建一个时钟变量来追踪FPS
while True:
clock.tick() # 开启追踪
img = sensor.snapshot().lens_corr(1.8) # 创建图片变量并将拍摄到的图片存入,消除圆筒畸变
lcd.display(img) # 在lcd屏幕上显示img
print(clock.fps()) # 在串行终端上打印FPS
三、机器视觉(image)——画图:
基础知识:
构造函数:
1| img=sensor.snapshot()
2| img=image.Image(path[, copy_to_fb=False])
功能:创建图像,通过拍摄或读取文件路径获取。
· copy_to_fb=True:可以加在大图片;
· copy_to_fb=False:不可以加载大图片。
img = image.Image("图片名.格式", copy_to_fb=True) # 表示加载根目录下的图片,要先将图片传递才行。
使用方法:
img.draw_line(x0, y0, x1, y1[, color[, thicknesd=1]]):
功能:画线段
· (x0,y0):起始坐标;
· (x1,y1):终点坐标;
· color:颜色,如(255,0,0)为红,(0,255,0)为绿,(0,0,255)为蓝;
· thickness:粗细。
image.draw_rectangle(x,y,w,h[,thickness=1[,fill=False]]]):
功能:画矩形。
· (x,y):起始坐标。
· w:宽度;
· h:高度;
· color:颜色;
· thickness:边框粗细;
· fill:是否填充。
image.draw_circle(x,y,radius[,color[,thickness=1[,fill=False]]]):
功能:画圆。
· (x,y):圆心;
· radius:半径;
· color:颜色;
· thickness:线条粗细;
· fill:是否填充。
image.draw_arrow(x0,y0,x1,y1[,color[,size,[thickness=1]]]):
功能:画箭头。
· (x0,y0):起始坐标;
· (x1,y1):终点坐标;
· color:颜色;
· size:箭头位置大小;
· thickness:线粗细。
image.draw_cross(x,y[,color[,size=5[,thickness=1]]]):
功能:画十字交叉。
· (x,y):交叉坐标;
· color:颜色;
· size:尺寸;
· thickness:线粗细。
image.draw_string(x,y,text[,color[,scale=1[,mono_space=True...]]]]):
功能:写字符。
· (x,y):起始坐标;
· text:字符内容;
· color:颜色;
· scale:字体大小;
· mono_space:强制间距。
基础实验:
# 使用摄像头测量帧率
import lcd # 引入lcd模块
import sensor # 引入摄像头模块
import time # 引入时间模块
import image # 引入机器视觉模块
lcd.init() # 初始化lcd模块
sensor.reset() # 初始化摄像头
sensor.set_vflip(1) # 设置摄像头位后置模式,所见即所得
sensor.set_pixformat(sensor.RGB565) # 设置像素格式为彩色
sensor.set_framesize(sensor.QVGA) # 设置帧格式为QVGA,320*240
sensor.skip_frames() # 等待摄像头稳定,跳过一系列不稳定的值
clock = time.clock() # 创建一个时钟变量来追踪FPS
while True:
clock.tick() # 开启追踪
img = sensor.snapshot() # 创建图片变量并将拍摄到的图片存入
# 画线段,起始坐标为(20,20);终止坐标为(100,20),颜色为红色,线宽度为2
img.draw_line(20, 20, 100, 20, color = (255, 0, 0), thickness = 2)
# 画矩形,起始坐标为(150,20),宽度为100,高度为30,颜色为绿色,边框粗度为2,设置为非填充。
img.draw_rectangle(150, 20, 100, 30, color = (0, 255, 0), thickness = 2, fill = False)
# 画圆形,圆心坐标为(60,120),半径为40,颜色为蓝色,边框宽度为2,不填充
img.draw_circle(60, 120, 40, color = (0, 0, 255), thickness = 2, fill = False)
# 画箭头,起始坐标(150,120),终点坐标(250,120),颜色为白色,箭头大小为20,线宽度为2
img.draw_arrow(150, 120, 250, 120, color=(255, 255, 255), size = 20, thickness = 2)
# 画十字交叉,交叉坐标为(60,200),颜色为白色,尺寸为20,线宽度为2
img.draw_cross(60, 200, color = (255, 255, 255), size = 20, thickness = 2)
# 写字符,起始坐标为(150,200),字符为"JiangXianFengGe",颜色为白色,字体大小为2,无强制间距。
img.draw_string(150, 200, "JiangXianFengGe", color = (255, 255, 255), scale = 2, mono_space = False)
lcd.display(img) # 在lcd屏幕上显示img
print(clock.fps()) # 在串行终端上打印FPS