本篇讲述摄像头使用显示及简单的画图。
一.原理了解
K230 具备 3 路 MIPI-CSI 输入(3x2 lane/1x4+1x2 lane),最多可连接 3 路摄像头,每路摄像头支持输出 3 个通道,提供不同的分辨率和图像格式。开发板CSI2上已配有GC2093摄像头,查阅资料是支持200W像素(1920*1080),60fps。摄像头接口原理如下
关于K230显示,官网也做了些讲解。K230 配备 1 路 MIPI-DSI(1x4 lane),可驱动 MIPI 屏幕或通过接口芯片转换驱动 HDMI 显示器及支持虚拟IDE缓冲区显示。这里用于方便调试,选择支持虚拟IDE缓冲区显示。三者特点这里也了解下。
●MIPI显示屏:外接01Studio 3.5寸MiPi显示屏,可以一体化组装,适合离线部署调试使用。最大支持800x480分辨率。
●HDMI:外接HDMI显示屏,清晰度最高。最大支持1920x1080分辨率。
●IDE缓冲区显示:性价比最高,图像质量有一定下降,但能满足大部分场合调试使用。最大支持1920x1080分辨率。
二.代码准备
1.首先了解下摄像头及Display API使用函数及编码流程。
sensor.reset() ---复位和初始化摄像头。
sensor.set_framesize---设置每个通道的图像输出尺寸
sensor.set_pixformat---设置图像像素格式
sensor.set_hmirror---设置摄像头画面水平镜像
sensor.set_vflip---设置摄像头画面垂直翻转
Display.init---初始化Display模块
Display.deinit()---注销Display模块
2.关于画图API使用
sensor.snapshot()---通过摄像头拍摄方式返回image对象
image.Image---通过读取图片方式创建image对象
image.draw_line---画线段
image.draw_rectangle---画矩形
image.draw_circle---画圆
image.draw_arrow---画箭头
image.draw_cross---画十字交叉
image.draw_string---写字符
image.draw_string_advanced---写字符,支持中文。 这里实测“楠”字显示不出来。
3.代码编写
了解上面的API函数及构建流程,下面代码实现摄像头显示与画图功能。
'''
#1.实现摄像头图像采集显示
#2.画图
'''
import time, os, sys
from media.sensor import * #导入sensor模块,使用摄像头相关接口
from media.display import * #导入display模块,使用display相关接口
from media.media import * #导入media模块,使用meida相关接口
sensor = Sensor() #构建摄像头对象
sensor.reset() #复位和初始化摄像头
sensor.set_framesize(Sensor.FHD) #设置帧大小FHD(1920x1080),默认通道0
sensor.set_pixformat(Sensor.RGB565) #设置输出图像格式,默认通道0
print(sensor.width(), sensor.height())
#使用IDE缓冲区输出图像,显示尺寸和sensor配置一致。
Display.init(Display.VIRT, sensor.width(), sensor.height())
MediaManager.init() #初始化media资源管理器
sensor.run() #启动sensor
clock = time.clock()
while True:
clock.tick()
'''摄像头图像采集显示'''
img = sensor.snapshot() #拍摄一张图
# Display.show_image(img) #显示图片
'''画图'''
# 画线段:从 x0, y0 到 x1, y1 坐标的线段,颜色红色,线宽度 2。
img.draw_line(20, 220, 100, 220, color = (255, 0, 0), thickness = 2)
#画矩形:绿色不填充。
img.draw_rectangle(150, 150, 200, 240, color = (0, 255, 0), thickness = 2, fill = False)
#画圆:蓝色不填充。
img.draw_circle(60, 320, 50, color = (0, 0, 255), thickness = 5, fill = False)
#画箭头:白色。
img.draw_arrow(150, 120, 250, 120, color = (255, 0, 255), size = 20, thickness = 5)
#画十字交叉。
img.draw_cross(60, 120, color = (0, 255, 255), size = 20, thickness = 2)
#写字符。
#img.draw_string(150, 200, "Hello 01Studio!", color = (255, 255, 255), scale = 4, mono_space = False)
#写字符,支持中文。
img.draw_string_advanced(100, 400, 50, "EEWorld & 01Studio", color = (255, 0, 255))
img.draw_string_advanced(100, 500, 50, "K230开发板", color = (255, 255, 0))
img.draw_string_advanced(100, 600, 66, "祝2025蛇年新春快乐", color = (255, 0, 0))
Display.show_image(img)
print(clock.fps()) #打印FPS
三.调试测验
IDE运行,帧缓冲区点选“缩放”,可以看到显示摄像头画面,以及画图,效果如下,可以看到帧率在45fps左右,动态显示视频,画图也是按设计显现。
至此,实现摄像头显示与画图功能。
|