视频采集基础:摄像头传感器原理与色彩空间转换
做视频编解码这么多年,我始终觉得一个道理特别朴素——你采集到的画面质量,直接决定了后面编码的天花板。再牛的 H.265 编码器,也救不了一团模糊的原始信号。
这一章,咱们就聊聊视频采集的源头:摄像头传感器。说白了,就是搞清楚光是怎么变成数字信号的,以及我们该怎么选分辨率、帧率,还有那个绕不开的 YUV 和 RGB 转换。
CMOS vs CCD:两种主流传感器
目前市面上绝大多数的摄像头,核心就两种传感器:CMOS 和 CCD。我刚开始入行那会儿,CCD 还是高端货,CMOS 被嫌弃噪声大。但现在,CMOS 已经全面逆袭了。
| 特性 | CMOS | CCD |
|---|---|---|
| 功耗 | 低(单电源供电) | 高(多路电压) |
| 读出速度 | 快(每个像素独立放大) | 慢(逐行转移读出) |
| 噪声 | 较高(但现代工艺已改善) | 低(统一读出) |
| 成本 | 低(标准半导体工艺) | 高(专用工艺) |
| 集成度 | 高(可集成 ISP、ADC) | 低(需外置芯片) |
| 应用场景 | 手机、网络摄像头、安防 | 工业检测、天文、医疗 |
我个人习惯,做消费级产品直接选 CMOS。原因很简单:便宜、省电、集成度高。一块芯片就能搞定感光、模数转换、甚至部分图像处理。CCD 虽然画质干净,但那个功耗和成本,做产品真扛不住。
分辨率与帧率:怎么选才不浪费?
分辨率决定了画面的精细度,帧率决定了流畅度。但这两者背后,藏着带宽和算力的博弈。
你想想看,4K@60fps 的数据量是 1080p@30fps 的 8 倍。如果后端编码器或者传输链路扛不住,画面就会卡顿、丢帧。我见过太多人一上来就开 4K,结果编码器跑不动,最后出来的视频还不如 1080p 清晰。
常见分辨率与帧率选择建议
- 1080p@30fps:通用场景,直播、会议、监控。性价比最高。
- 4K@30fps:需要细节的场景,比如车牌识别、医疗影像。
- 1080p@60fps:运动场景,比如体育赛事、无人机航拍。
- 4K@60fps:专业制作,但需要强大的编码和存储支持。
色彩空间:YUV 与 RGB 的转换
传感器采集到的原始数据,通常是 Bayer 格式的 RGB 数据。但 H.265 编码器不吃 RGB,它只认 YUV。为什么?
说白了,人眼对亮度(Y)的敏感度远高于色度(U、V)。YUV 可以把亮度和色度分开,然后对色度进行下采样,比如 4:2:0,这样数据量直接减半,画质损失却很小。RGB 三个通道同等重要,没法这么压缩。
YUV 采样格式对比
| 格式 | 描述 | 数据量(相对 RGB) | 常见场景 |
|---|---|---|---|
| 4:4:4 | 每个像素都有完整的 Y、U、V | 100% | 专业调色、屏幕采集 |
| 4:2:2 | 水平方向每 2 个像素共享一组 UV | 66% | 广播级视频 |
| 4:2:0 | 水平和垂直方向每 4 个像素共享一组 UV | 50% | H.264/H.265 编码、流媒体 |
嗯,这里要注意:4:2:0 是 H.265 的默认输入格式。如果你采集的是 RGB,必须转成 YUV 4:2:0 再送进编码器。转换公式其实不复杂,但精度很重要。
RGB 转 YUV 的标准公式(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
这个公式看起来简单,但我在项目中踩过坑。直接用浮点运算,速度慢;用整数近似,精度又不够。后来我改用查表法 + 定点数,速度提升了 3 倍,误差控制在 1 个像素值以内。
-pix_fmt yuv420p 参数。我曾经遇到一个项目,采集卡输出的是 RGB,我没指定格式,结果编码器默认按 YUV 处理,颜色全偏了。排查了整整两天才发现是格式没对齐。
知识体系总览
下面这张图,把这一章的核心逻辑串起来了。从光信号到数字信号,再到编码器能吃的 YUV 数据,每一步都有坑,也都有优化空间。
小结
这一章我们聊了传感器选型、分辨率帧率权衡、还有 YUV 转换。这些都是视频采集的基本功。下一章,我们会深入采集接口和驱动层,看看怎么把这些数据高效地搬进内存。
嗯,记住一句话:采集做不好,后面全是白忙活。