简介

摄像头的数据获取对没有接触过图像相关知识的新手来说具有一定的学习门槛,而通过micropython封装,把复杂的获取过程交给了底层开发人员实现,上层应用人员就只需要简单配置就可以获取到图像,本章将通过实例演示如何获取图像数据。

示例

import sensor
id = sensor.id.IMX307    #对应选择自己所接入的sensor型号,这里提供IMX307和GC2053
fmt = sensor.fmt.QVGA    #这里提供三种图像尺寸:HD(1280X720)、VGA(640X480)和QVGA(320X240)
sensor.init(id, fmt)
sensor.preview()#打开画面预览,摄像头刚打开画面偏暗,可以丢掉前面几次获取到的图像,或者sleep一段时间再获取
ret, size, data = sensor.yuv420()   #返回三个值,对应的顺序是结果、图像大小、图像数据
f = open("/root/app/res/output.yuv", "wb+")      #接下来把图像进行保存,从摄像头直接获取到的是YUV420格式的图像
f.write(data)
f.close()
sensor.destroy()

YUV格式的图像需要查看内容需要使用YUV查看工具,这里提供了YUV播放工具,点击可直接下载,或者在文章底下附件查看下载,对应的设置请参考下图

延伸

刚接触YUV格式的可能对这个图像格式感到陌生,如果感兴趣可以网上搜索相关的文章都有介绍(“Y”表示明亮度(Luminance或Luma),也就是灰阶值,“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色),这里简单说明下YUV420格式大小计算:

yuv420图像大小 = 图像宽度 x 图像高度 x 1.5

相比我们常见的RGB格式,以RGB24图像做对比,每个RGB24像素就占用3个字节,同等图像尺寸下,YUV420的大小是RGB24的一半。
那如何把YUV转换成我们常见的RGB格式呢?可以自己根据转换公式实现对应的算法来实现,有些芯片硬件自带了编码器来完成这个转换,硬件实现的方式效率更高,接下来,我们将开始认识硬件编码。

文档更新时间: 2020-12-09 09:45   作者:Tony