Back To List
摄像头基础技术与Linux V4L2框架

一.摄像头成像原理    

自然景象的反射光被镜头所捕捉(镜头光圈调节进光量)将聚焦好的图像精准对焦到光电传感器(色彩滤波会产生三基色)传感器将光信号转为数字信号,再借助模数转换最终得到原始图像码流数据.

编码协议规范

原始码流数据不能直接拿来使用,都要依据一定的协议规范将其编码, 常见的编码格式比如YUYV/MJPEG/H264/NV12各编码特点主要如下

1. YUYV:原始码流类型, 每个像素点占2个字节;

2. MJPEG:运动静止图像(或逐帧)压缩技术支持数据压缩7倍左右;

3. H264:国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式

4. NV12:原始码流类型, 每个像素点1.5个字节。

编码目的在于借助编解码技术,可有效压缩数据体积而不会或较少图像质量

三. Linux V4L2框架

Linux系统应用层和USB型摄像头借助UVC协议交互。而现实中摄像头存在多种接口类型,为了兼容不同的交互协议。在Linux kernel抽象了V4L2驱动框架借助提供的一系列命令, 方便应用层和各个协议对接。

V4L2(Video for Linux 2)Linux用于支持摄像头和视频设备的框架。它提供了一组API和驱动程序接口,用于在Linux系统中进行视频采集、视频流处理和视频播放等操作。

V4L2框架具有以下特点和功能:

设备抽象层:V4L2框架提供了一个设备抽象层,使得应用程序可以与各种不同类型的视频设备进行通信,包括摄像头、视频采集卡等。

统一的控制接口:V4L2定义了一套统一的控制接口,可以通过这些接口来配置和调整视频设备的各种参数,比如亮度、对比度、饱和度等。

视频捕获和输出:V4L2支持视频的捕获和输出功能,可以从视频设备中获取原始图像数据,并将其保存到文件或者进行实时显示。

视频流处理:V4L2框架提供了丰富的视频流处理功能,包括图像缩放、色彩空间转换、帧率控制、图像增强等,可以对视频数据进行实时的处理和操作。

内存映射和DMA支持:V4L2支持内存映射和DMA(直接内存访问)技术,可以加快视频数据的传输速度,提高系统性能。

四. V4L2使用简述

V4L2设备,其设备文件名通常以/dev/video开头,后面跟着一个数字,表示设备节点号。例如/dev/video0就是第一个V4L2设备的设备文件名。

V4L2框架提供了一组API,用于控制和管理视频设备。这些API主要包括以下几个部分:

1.设备操作:包括打开、关闭、查询设备信息等操作。

2.参数设置:包括设置视频格式、帧率、曝光时间、白平衡等参数。

3.缓冲区管理:包括申请/释放缓冲区、查询缓冲区状态等操作。

4.视频流控制:包括启动/停止视频采集、查询当前视频帧等操作。

五. V4L2框架图

图片1.png

六. 常见摄像头输出格式

1. RAW RGB格式

RAW RGB摄像头阵列获取的数据,摄像头经光电转换后输出的数据就是RAW RGB摄像头每个感光点只能识别红绿蓝颜色中的一种。常说30万像素就是指30万个感光点

传统的红绿蓝格式如RGB565,数据格式为5bitR+6bitG+5BitBG6bit,原因是人眼对绿色比较敏感。

总结, RAW RGB每个像素只有一种颜色(R/G/B的一种),RGB每个像素都有三种颜色,值在0-255之间, 摄像头输出的数据RAW DATA,经过ISP彩色插值算法转换就变成了RGB

2. YUV

  RGB相比,YUV占用更少的空间,主流的采样方式有三种,YUV444YUV422YUV420.

Y表示亮度分量(Luma):如果只显示Y的话,图像看起来会是一张黑白照.

U(b)表示色度分量:是蓝色部分去掉亮度(Y)。

V(Cr)表示色度分量:是红色部分去掉亮度(Y)。

YUV444采样,每一个Y对应一组UV分量。意思是4个像素里面的数据有4Y4U4V

YUV422采样,每一个Y对应一组UV分量。意思是4个像素里面的数据有4Y2U2V

YUV420采样,每一个Y对应一组UV分量。意思是4个像素里面的数据有4Y1U1V

 图片2.png

七. 视频编码原理与发展

图像数据基于互联网传输,使用编解码技术可以减少带宽, 统一视频编码标准,提高相应的兼容性。

图片3.png

Editor:小优智能科技有限公司 Time:Jun 28,2024
给我们Message
验证码