一、场景存储
- 通常指的是用于存储摄像头或传感器原始采集数据的文件格式,尤其是在自动驾驶、机器人、安防、工业视觉等需要记录真实世界场景的应用中。
格式 | 存储内容 | 用途场景 | 特点 |
---|---|---|---|
.bin | LiDAR点云、毫米波雷达数据、IMU、GPS、原始传感器帧 | 自动驾驶仿真、SLAM建图、数据回灌 | 结构自定义、紧凑高效、需配合元数据使用 |
.yuv | 摄像头原始图像帧(如YUV420、NV12) | 视频录制、图像算法调试、回放测试 | 无压缩/轻压缩、保留原始像素信息、兼容编解码器 |
举个例子:自动驾驶场景数据录制
一个典型的自动驾驶数据包(如ROS bag、Apollo record、NVIDIA DriveWorks log)中,可能会包含:
front_camera.yuv:前置摄像头原始图像帧(1920×1080,YUV420)
lidar_points.bin:每帧LiDAR点云(如每点12字节:x,y,z,intensity)
imu_data.bin:IMU传感器数据(时间戳、加速度、角速度)
gps_data.bin:GPS定位信息(经纬度、速度、航向)
这些文件通常按时间戳命名,用于后续离线仿真、算法训练、场景回放或问题复现。
1.📁 bin 格式数据
- bin 是英文 binary(二进制)的缩写,通常表示二进制文件。
- 特点:
- 文件内容是以二进制形式存储的,不是人类可读的文本。不包含文件头或格式信息,具体含义取决于生成它的程序或上下文。常用于存储原始数据(如传感器数据、固件、图像、音频、程序代码等)。
- 举例:
image.bin 可能是一张未经压缩的原始图像数据。
firmware.bin 可能是某个设备的固件文件。
data.bin 可能是一组传感器采集的原始数值。
- 注意事项:
由于 .bin 文件本身没有标准格式,你必须知道它的来源和结构(比如每个字节代表什么)才能正确解析。
2.🎨 yuv 格式数据
- YUV 是一种颜色编码系统,常用于视频和图像处理领域。
- 组成:
Y(Luma):亮度分量,表示图像的明暗信息。
U/V(Chroma):色度分量,表示颜色信息。 - 特点:
与RGB不同:RGB每个像素都有红绿蓝三个值,而YUV将亮度与色度分离,更适合压缩。
常用于视频编解码:如MPEG、H.264、摄像头输出等。
有多种采样格式(如YUV420、YUV422、YUV444),影响数据排列方式和压缩率。 - 举例:
一个 1920x1080 的 YUV420 图像,数据大小为:
复制
Y = 1920 * 1080 字节
U = 960 * 540 字节(宽和高都是Y的一半)
V = 960 * 540 字节
总大小 ≈ 1920 * 1080 * 1.5 字节 - 用途:
摄像头原始输出(如Android Camera2 API的YUV_420_888格式)。
视频解码器的输出帧。
图像处理算法(如人脸识别、滤镜)的中间格式。
3.总结
特性 | bin格式 | yuv格式 |
---|---|---|
本质 | 通用二进制文件 | 特定的图像/视频颜色编码格式 |
是否可读 | 不可直接读,需上下文 | 可用专用工具查看(如YUV播放器) |
用途 | 存储任意原始数据 | 存储图像/视频的像素数据 |
是否有标准 | 无统一标准,取决于上下文 | 有明确的YUV标准(如BT.601/709) |
二、存储数据方式
1.bin
- 要理解“bin 是怎么存数据的”,必须先弄清 谁写的、写给谁、每个字节代表什么。
- 举例10帧视频图像
(1)前提
图像 | 分辨率 | 每像素字节 | 每帧字节 |
---|---|---|---|
灰度图 | 640 × 480 | 1 B (uint8) | 307 200 B |
深度图 | 640 × 480 | 2 B (uint16) | 614 400 B |
单帧总大小 = 307 200 + 614 400 = 921 600 B
10 帧总大小 = 921 600 × 10 = 9 216 000 B
(2)文件布局
[0:31] 文件头 32 B
[32:] 帧0灰度 + 帧0深度帧1灰度 + 帧1深度...帧9灰度 + 帧9深度
(3)文件头结构(32 B)
偏移 | 字段 | 类型 | 值 |
---|---|---|---|
0 | magic | uint32 | 0x20240506 |
4 | version | uint32 | 1 |
8 | width | uint32 | 640 |
12 | height | uint32 | 480 |
16 | frame_count | uint32 | 10 |
20 | gray_bytes | uint32 | 307 200 |
24 | depth_bytes | uint32 | 614 400 |
28 | reserved | uint32 | 0 |
- 通过 32 字节文件头描述元数据,后面 连续拼接 每帧“灰度(uint8)+ 深度(uint16)”裸数据,就能用一个 .bin 文件无损、紧凑地保存 10 帧双图视频。
2.YUV
(1)选型:YUV420 (I420 / YV12)
图 | 分辨率 | 来源 | 在 YUV420 中的排布 |
---|---|---|---|
RGB | 640×480 | 3×8 bit | 先转 Y、U、V,再按 I420 顺序存放 |
- I420 布局
Y 平面:640×480 = 307 200 B
U 平面:320×240 = 76 800 B
V 平面:320×240 = 76 800 B
单帧大小 = 460 800 B
10 帧总大小 = 4 608 000 B
(2) RGB → YUV420 转换公式(BT.601)
Y = 0.299 R + 0.587 G + 0.114 B
U = -0.169 R - 0.331 G + 0.500 B + 128
V = 0.500 R - 0.419 G - 0.081 B + 128