视觉识别模块
0、学前先看&供电说明
1、固件下载与烧录
2、安装编程环境
3、调试运行例程
4、离线运行例程
5、Micropython 快速入门
6、GUI程序使用说明
7、二维云台安装教程
8、FPIOA引脚分配
9、RGB灯
10、蜂鸣器
11、按键
12、串口通信
13、I2C通讯
14、PWM
15、WDT看门狗
16、定时器计时
17、傅里叶变换
18、SHA256加密
19、AES加密
20、多线程
21、文件读写
22、图像显示
23、触摸显示
24、摄像头显示
25、图像翻转
26、照相机
27、绘制圆形
28、绘制矩形
29、绘制椭圆
30、绘制箭头
31、绘制十字准心
32、绘制文字
汝城县职业中等专业学校知识库-信息中心朱老师编辑
-
+
首页
24、摄像头显示
 ## 例程实验效果简介 这一节我们来调用一下摄像头,在IDE的帧缓冲区中显示摄像头捕获到的图像 我们用CanMV IDE打开例程代码,将K230用usb连接到电脑上 点击CanMV IDE左下角的运行按钮,可以看到IDE右上角的帧缓冲区中显示了摄像头捕获到的图像  ## 代码讲解 本节教程的源码文件位于 \[源码汇总 / 02.Basic / 17.sensor.py \] ### 完整代码 \# 导入必要的模块:时间、数学、操作系统、垃圾回收、系统 \# (Import necessary modules: time, math, os, garbage collection, system) import time, math, os, gc, sys \# 导入媒体相关模块:传感器、显示、媒体管理 \# (Import media-related modules: sensor, display, media manager) from media.sensor import \* from media.display import \* from media.media import \* \# 定义图像宽度和高度常量 \# (Define image width and height constants) WIDTH = 640 HEIGHT = 480 \# 初始化传感器变量为空 \# (Initialize sensor variable as None) sensor = None try: \# 使用默认配置构造传感器对象,设置指定宽度和高度 \# (Construct a Sensor object with default configuration, setting specified width and height) sensor = Sensor(width = WIDTH, height = HEIGHT, fps\=30) \# 传感器复位 \# (Reset the sensor) sensor.reset() \# 设置水平镜像(当前被注释) \# (Set horizontal mirror - currently commented out) \# sensor.set\_hmirror(False) \# 设置垂直翻转(当前被注释) \# (Set vertical flip - currently commented out) \# sensor.set\_vflip(False) \# 设置通道0的输出尺寸 \# (Set channel 0 output size) sensor.set\_framesize(width = WIDTH, height = HEIGHT) \# 设置通道0的输出格式为RGB565 \# (Set channel 0 output format to RGB565) sensor.set\_pixformat(Sensor.RGB565) \# 使用IDE作为输出目标初始化显示 \# (Initialize display using IDE as output target) Display.init(Display.ST7701, width = WIDTH, height = HEIGHT, to\_ide = True) \# 初始化媒体管理器 \# (Initialize the media manager) MediaManager.init() \# 启动传感器运行 \# (Start the sensor running) sensor.run() \# 创建时钟对象用于计算帧率 \# (Create a clock object to calculate frames per second) fps = time.clock() \# 主循环 \# (Main loop) while True: \# 帧率计时器tick \# (Tick the FPS timer) fps.tick() \# 检查是否应该退出程序 \# (Check if the program should exit) os.exitpoint() \# 从传感器获取一帧图像 \# (Capture a frame from the sensor) img = sensor.snapshot() \# 在屏幕上显示结果图像 \# (Display the resulting image on screen) Display.show\_image(img) \# 执行垃圾回收 \# (Perform garbage collection) gc.collect() \# 打印当前帧率 \# (Print the current frames per second) print(fps.fps()) except KeyboardInterrupt as e: \# 捕获键盘中断异常(用户手动停止) \# (Catch keyboard interrupt exception - user manually stops) print(f"user stop") except BaseException as e: \# 捕获所有其他异常 \# (Catch all other exceptions) print(f"Exception '{e}'") finally: \# 无论如何都执行清理工作 \# (Perform cleanup regardless of how the program exits) \# 停止传感器运行(如果传感器对象存在) \# (Stop the sensor if the sensor object exists) if isinstance(sensor, Sensor): sensor.stop() \# 反初始化显示 \# (Deinitialize the display) Display.deinit() \# 设置退出点,允许进入睡眠模式 \# (Set exit point to enable sleep mode) os.exitpoint(os.EXITPOINT\_ENABLE\_SLEEP) \# 短暂延时100毫秒 \# (Brief delay of 100 milliseconds) time.sleep\_ms(100) \# 释放媒体缓冲区 \# (Release media buffer) MediaManager.deinit() ## 摄像头相关API > 以下内容节选自 CanMV Sensor API 章节 CanMV K230 平台的 `sensor` 模块负责图像采集与数据处理。该模块提供了一套高级 API,开发者可以利用这些接口轻松获取不同格式与尺寸的图像,而无需了解底层硬件的具体实现。  sensor 0、sensor 1 和 sensor 2 分别代表三个图像输入传感器设备;Camera Device 0、Camera Device 1 和 Camera Device 2 对应相应的图像处理单元;output channel 0、output channel 1 和 output channel 2 表示每个图像处理单元最多支持三个输出通道。通过软件配置,不同的传感器设备可以灵活映射到相应的图像处理单元。 CanMV K230 的 `sensor` 模块最多支持三路图像传感器的同时接入,每一路均可独立完成图像数据的采集、捕获和处理。此外,每个视频通道可并行输出三路图像数据供后端模块进行进一步处理。实际应用中,具体支持的传感器数量、输入分辨率和输出通道数将受限于开发板的硬件配置和内存大小,因此需根据项目需求进行综合评估。 ### 构造函数 **描述** 通过 `csi id` 和图像传感器类型构建 `Sensor` 对象。 在图像处理应用中,用户通常需要首先创建一个 `Sensor` 对象。CanMV K230 软件可以自动检测内置的图像传感器,无需用户手动指定具体型号,只需设置传感器的最大输出分辨率和帧率。有关支持的图像传感器信息,请参见[图像传感器支持列表](https://developer.canaan-creative.com/k230_canmv/zh/main/zh/api/mpp/K230_CanMV_Sensor%E6%A8%A1%E5%9D%97API%E6%89%8B%E5%86%8C.html#id4)。如果设定的分辨率或帧率与当前传感器的默认配置不符,系统会自动调整为最优配置,最终的配置可在日志中查看,例如 `use sensor 23, output 640x480@90`。 **语法** sensor = Sensor(id, \[width, height, fps\]) **参数** 参数名称 描述 输入/输出 说明 id `csi` 端口,支持 `0-2`,具体端口请参考硬件原理图 输入 可选,不同型号开发板的默认值不同 width `sensor` 最大输出图像宽度 输入 可选,默认 `1920` height `sensor` 最大输出图像高度 输入 可选,默认 `1080` fps `sensor` 最大输出图像帧率 输入 可选,默认 `30` **返回值** 返回值 描述 Sensor 对象 传感器对象 **举例** sensor = Sensor(id=0) sensor = Sensor(id=0, width=1280, height=720, fps=60) sensor = Sensor(id=0, width=640, height=480) ### 2.1 sensor.reset **描述** 复位 `sensor` 对象。在构造 `Sensor` 对象后,必须调用此函数以继续执行其他操作。 **语法** sensor.reset() **参数** 参数名称 描述 输入/输出 无 **返回值** 返回值 描述 无 **举例** \# 初始化 sensor 设备 0 以及传感器 OV5647 sensor.reset() ### 2.2 sensor.set\_framesize **描述** 设置指定通道的输出图像尺寸。用户可以通过 `framesize` 参数或直接指定 `width` 和 `height` 来配置输出图像尺寸。**宽度会自动对齐到 16 像素宽**。 **语法** sensor.set\_framesize(framesize=FRAME\_SIZE\_INVALID, chn=CAM\_CHN\_ID\_0, alignment=0, \*\*kwargs) **参数** 参数名称 描述 输入/输出 framesize sensor 输出图像尺寸 输入 chn sensor 输出通道号 输入 width 输出图像宽度,_kw\_arg_ 输入 height 输出图像高度,_kw\_arg_ 输入 **返回值** 返回值 描述 无 **注意事项** * 输出图像尺寸不得超过图像传感器的实际输出能力。 * 各通道的最大输出图像尺寸受硬件限制。 **举例** \# 配置 sensor 设备 0,输出通道 0,输出图尺寸为 640x480 sensor.set\_framesize(chn=CAM\_CHN\_ID\_0, width=640, height=480) \# 配置 sensor 设备 0,输出通道 1,输出图尺寸为 320x240 sensor.set\_framesize(chn=CAM\_CHN\_ID\_1, width=320, height=240) ### 2.3 sensor.set\_pixformat **描述** 配置指定通道的图像传感器输出图像格式。 **语法** sensor.set\_pixformat(pix\_format, chn=CAM\_CHN\_ID\_0) **参数** 参数名称 描述 输入/输出 pix\_format 输出图像格式 输入 chn sensor 输出通道号 输入 **返回值** 返回值 描述 无 **举例** \# 配置 sensor 设备 0,输出通道 0,输出 NV12 格式 sensor.set\_pixformat(sensor.YUV420SP, chn=CAM\_CHN\_ID\_0) \# 配置 sensor 设备 0,输出通道 1,输出 RGB888 格式 sensor.set\_pixformat(sensor.RGB888, chn=CAM\_CHN\_ID\_1) ### 2.4 sensor.set\_hmirror **描述** 配置图像传感器是否进行水平镜像。 **语法** sensor.set\_hmirror(enable) **参数** 参数名称 描述 输入/输出 enable `True` 开启水平镜像功能 `False` 关闭水平镜像功能 输入 **返回值** 返回值 描述 无 **举例** sensor.set\_hmirror(True) ### 2.5 sensor.set\_vflip **描述** 配置图像传感器是否进行垂直翻转。 **语法** sensor.set\_vflip(enable) **参数** 参数名称 描述 输入/输出 enable `True` 开启垂直翻转功能 `False` 关闭垂直翻转功能 输入 **返回值** 返回值 描述 无 **举例** sensor.set\_vflip(True) ### 2.6 sensor.run **描述** 启动图像传感器的输出。**必须在调用 `MediaManager.init()` 之前执行此操作。** **语法** sensor.run() **返回值** 返回值 描述 无 **注意事项** * 当同时使用多个传感器(最多 3 个)时,仅需其中一个执行 `run` 即可。 **举例** \# 启动 sensor 设备输出数据流 sensor.run() ### 2.7 sensor.stop **描述** 停止图像传感器输出。**必须在 `MediaManager.deinit()` 之前调用此方法。** **语法** sensor.stop() **返回值** 返回值 描述 无 **注意事项** * 如果同时使用多个图像传感器(最多 3 个),**每个传感器都需单独调用 `stop`**。 **举例** \# 停止 sensor 设备 0 的数据流输出 sensor.stop() ### 2.8 sensor.snapshot **描述** 从指定输出通道中捕获一帧图像数据。 **语法** sensor.snapshot(chn=CAM\_CHN\_ID\_0) **参数** 参数名称 描述 输入/输出 chn sensor 输出通道号 输入 **返回值** 返回值 描述 image 对象 捕获的图像数据 其他 捕获失败 **举例** \# 从 sensor 设备 0 的通道 0 捕获一帧图像数据 sensor.snapshot()
admin
2025年12月30日 14:23
转发
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文件
PDF文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
有效期
AI