整体代码:
import lcd, sensor, time
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_auto_exposure(1)
sensor.set_auto_gain(0, gain_db = 12)
sensor.set_auto_whitebal(0, rgb_gain_db = (0,0,0))
sensor.set_vflip(1)
sensor.set_hmirror(1)
sensor.skip_frames(time = 2000)
class lcd_show_data():
year = 2024
month = 01
dat = 24
hour = 21
minute = 23
ping = lcd_show_data()
def lcd_show():
lcd.draw_string(0, 0, "Hello World", lcd.RED, lcd.WHITE)
lcd.draw_string(0, 15, str(ping.year)+"/"+str(ping.month)+"/"+str(ping.dat), lcd.RED, lcd.WHITE)
lcd.draw_string(0, 30, str(ping.hour)+":"+str(ping.minute), lcd.RED, lcd.WHITE)
lcd.init(freq=15000000,color=0XFFFF,invert=1,lcd_type=0)
clock = time.clock()
while(True):
clock.tick()
img = sensor.snapshot()
fps = clock.fps()
img.draw_string(230,0,("%2.1ffps"%(fps)),color=(0,0,128),scale=2)
lcd.display(img)
lcd_show()
效果展示:
程序说明:
1.导入库文件
import lcd, sensor, time
2.感光元件配置
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_auto_exposure(1)
sensor.set_auto_gain(0, gain_db = 12)
sensor.set_auto_whitebal(0, rgb_gain_db = (0,0,0))
sensor.set_vflip(1)
sensor.set_hmirror(1)
sensor.skip_frames(time = 2000)
这些都是感光元件配置常使用的
①sensor.reset([, freq=24000000[, set_regs=True[, dual_buff=False]]])
参数
freq
: 设置摄像头时钟频率,频率越高帧率越高,但是画质可能更差。默认24MHz
, 如果摄像头有彩色斑点(ov7740),可以适当调低比如20MHz
set_regs
: 允许程序写摄像头寄存器,默认为True
。 如果需要自定义复位序列,可以设置为False
,然后使用sensor.__write_reg(addr, value)
函数自定义写寄存器序列dual_buff
: 默认为False
。允许使用双缓冲,会增高帧率,但是内存占用也会增加(大约为384KiB)choice
: 指定需要搜索的摄像头类型,ov类型(1),gc类型(2),mt类型(3),不传入该参数则搜索全部类型摄像头
返回值
无
sensor.reset() 通常默认配置就好,dual_buff置为True可以提升帧率,但是会影响画质
②sensor.set_pixformat(format[, set_regs=True])
参数
format
: 帧格式set_regs
: 允许程序写摄像头寄存器,默认为True
。 如果需要自定义设置像素格式的序列,可以设置为False
,然后使用sensor.__write_reg(addr, value)
函数自定义写寄存器序列
可选的帧格式有
GRAYSCALE
,RGB565
,YUV422
- GRAYSCALE主要用于黑白图像处理
- RGB565用于彩色图像处理但色彩表现相对简单
- YUV422则广泛应用于电视系统和模拟视频领域,能够提供更为丰富的色彩表现。
返回值
True
: 设置成功False
: 设置错误
sensor.set_pixformat(sensor.RGB565) 一般都是设置为RGB565,做图像处理基本上都是用彩色的,虽然灰白也有。
③sensor.set_framesize(framesize[, set_regs=True])
参数#
framesize
: 帧大小set_regs
: 允许程序写摄像头寄存器,默认为True
。 如果需要自定义设置帧大小的序列,可以设置为False
,然后使用sensor.__write_reg(addr, value)
函数自定义写寄存器序列
返回值
True
: 设置成功False
: 设置错误
sensor.set_framesize(sensor.QVGA) 都是设置为QVGA帧大小
④画面调整
sensor.set_auto_exposure(1)
sensor.set_auto_gain(0, gain_db = 12)
sensor.set_auto_whitebal(0, rgb_gain_db = (0,0,0))
接下来这三句,主要是:
- 开启自动曝光(当参数为True时,自动曝光功能开启。当参数为False时,可能关闭该功能,需要手动设置曝光参数),默认是自动曝光
- 开启或关闭自动增益控制(第一个参数
False
表示关闭自动增益控制,第二个参数gain_db
是设置增益的初始值) - 开启或关闭自动白平衡(第一个参数
False
表示关闭白平衡功能,第二个参数gb_gain_db
是设置红、绿、蓝三个通道的增益初始值)
⑤镜像调整
sensor.set_vflip(1)
sensor.set_hmirror(1)
分别是画面垂直、水平方向镜像画面,根据自己板子上的需求更改
⑥跳帧
sensor.skip_frames(time = 2000)
跳过一定帧数,稳定上电画面不平滑的问题
3.定义一个显示类
class lcd_show_data():
year = 2024
month = 01
dat = 24
hour = 21
minute = 23
这里我定义了一个类,其实没太大必要
4.实例化对象
ping = lcd_show_data()
5.显示内容
def lcd_show():
lcd.draw_string(0, 0, "Hello World", lcd.RED, lcd.WHITE)
lcd.draw_string(0, 15, str(ping.year)+"/"+str(ping.month)+"/"+str(ping.dat), lcd.RED, lcd.WHITE)
lcd.draw_string(0, 30, str(ping.hour)+":"+str(ping.minute), lcd.RED, lcd.WHITE)
6.LCD初始化
lcd.init(freq=15000000,color=0XFFFF,invert=1,lcd_type=0)
lcd.init(type=1, freq=15000000, color=lcd.BLACK, invert = 0, lcd_type = 0)#
参数
type
: 设备的类型(保留给未来使用):0
: None1
: lcd shield(默认值)2
: Maix Cube5
: sipeed rgb 屏转接板
type 是键值参数,必须在函数调用中通过写入 type= 来显式地调用
-
freq
:LCD
(实际上指SPI
的通讯速率) 的频率 -
color
:LCD
初始化的颜色, 可以是 16 位的RGB565
颜色值,比如0xFFFF
; 或者RGB888
元组, 比如(236, 36, 36)
, 默认lcd.BLACK
-
invert
:LCD
反色显示 -
lcd_type
: lcd 类型:0
: 默认类型1
: LCD_TYPE_ILI94862
: LCD_TYPE_ILI94813
: LCD_TYPE_5P0_7P0,5 寸或 7 寸 分辨率为 800 * 480 的 lcd (需要搭配 sipeed 转接板)4
: LCD_TYPE_5P0_IPS,5 寸 分辨率为 854*489 的 IPS lcd (需要搭配 sipeed 转接板)5
: LCD_TYPE_480_272_4P3,4.3 寸分辨率为 480*272 的 lcd (需要搭 sipeed 配转接板)
MaixCube 和 MaixAmigo 使用 LCD 之前需要配置电源芯片,否则会出现花屏现象,这一步 MaixPy 固件会自动配置,无需手动操作,用户只需要了解即可
7.创建时钟对象
clock = time.clock()
clock.tick()
fps = clock.fps()