小优智能科技有限公司成立于2015年底,是一家专注于高精度3D机器视觉模组研发、生产及销售的高科技企业。
公司自主研发的3D机器视觉模组采用激光/DLP白光编码光栅结构光+双工业相机方案,还原物体三维信息,广泛应用于消费电子领域、工业领域和安防领域,具有精度高、速度快、成本低的优势。
一.摄像头成像原理
自然景象的反射光被镜头所捕捉(由镜头光圈调节进光量),并将聚焦好的图像精准对焦到光电传感器(色彩滤波会产生三基色),传感器将光信号转为数字信号,再借助模数转换最终得到原始图像码流数据.
二.编码协议规范
原始码流数据不能直接拿来使用,都要依据一定的协议规范将其编码, 常见的编码格式比如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. RAW RGB格式
RAW RGB是摄像头阵列获取的数据,摄像头经光电转换后输出的数据就是RAW RGB。摄像头每个感光点只能识别红绿蓝颜色中的一种。常说的30万像素就是指30万个感光点。
传统的红绿蓝格式如RGB565,数据格式为5bitR+6bitG+5BitB,G是6bit,原因是人眼对绿色比较敏感。
总结, RAW RGB每个像素只有一种颜色(R/G/B的一种),RGB每个像素都有三种颜色,值在0-255之间, 摄像头输出的数据RAW DATA,经过ISP彩色插值算法转换就变成了RGB。
2. YUV
与RGB相比,YUV占用更少的空间,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0.
Y表示亮度分量(Luma):如果只显示Y的话,图像看起来会是一张黑白照.
U(b)表示色度分量:是蓝色部分去掉亮度(Y)。
V(Cr)表示色度分量:是红色部分去掉亮度(Y)。
YUV4:4:4采样,每一个Y对应一组UV分量。意思是4个像素里面的数据有4个Y,4个U,4个V。
YUV4:2:2采样,每一个Y对应一组UV分量。意思是4个像素里面的数据有4个Y,2个U,2个V。
YUV4:2:0采样,每一个Y对应一组UV分量。意思是4个像素里面的数据有4个Y,1个U,1个V。
七. 视频编码原理与发展
图像数据基于互联网传输,使用编解码技术可以减少带宽, 统一视频编码标准,提高相应的兼容性。