我正在使用 IDS uEye 工业相机这个。它基本上以 23 fps(4 通道 8 位)的速度录制 1280 x 1024。由于可能存在一些 USB 电源/带宽问题,我试图计算所需的相机带宽。所以我这样做了:
1280 * 1024 * 23 * 4 * 8 / (8 * 10^6) = ~120 MiB/s = ~115 MB/s
我通过检查捕获的 bmp 图像的大小确认了这一点:大约 5 MB,因此在 23 fps 下,它给出 5*23 = 115 MB/s。需要澄清的是,我不是在录制视频流,而是在录制单独的帧。
然后我意识到这是一台 USB 2.0 相机,因此限制为 60 MB/s。相机文档上也说:
“理论上,这种模式下可以传输高达 50 MByte/s 的数据,但实际上,这个值几乎从未达到过。高性能台式电脑可以传输大约 40 MByte/s,大多数笔记本电脑或嵌入式 PC 系统的传输速度甚至更低。”
所以我开始想我是不是错过了什么。我曾经usb接口监控 USB 带宽,我得到的值约为 4 MiB/s。那么,相机在 USB 2.0 总线上运行时,每秒捕获 115 MB 的图像,而消耗的速度仅为 4 MB/s,这是怎么回事呢?这是某种压缩吗?
答案1
通常,相机使用相机的内置固件进行去马赛克处理,并传输 h.264、Mjpeg 或其他压缩格式。假设某些专业和高级相机允许您请求 RAW 图像(通常为 YUV 格式),并且数字传感器的输出几乎总是在线性范围内每组件 10 到 14 位之间,则数字会有所不同...
因此,假设 YUV 输出,并假设文档中提到的 10 位 ADC,RAW 中的带宽将是这样的:
1280 x 1024 x 10 (bits/pxl in a YUV 4:2:2) x 1 (channel - Sensor/wBayer Filters) x 23 x 1/8*10⁶= ~38 MB/s.
您可以在下一个链接中找到有关此内容的有用信息: https://picamera.readthedocs.io/en/release-1.12/fov.html
但与您的最后一条评论相关:
我得到的值是~4 MiB/s。
可能存在某种压缩。
例如对于 rPi 相机,使用 V4L 驱动程序,您可以请求其工作的模式,以及每种模式下的 fps 选项:
[video4linux2,v4l2 @ 0x11ccc50] 压缩:mjpeg:
Motion-JPEG:1920x1080 1280x720 800x600 640x480 640x360 352x288 320x240 1920x1080 [video4linux2,v4l2 @ 0x11ccc50] 原始:
yuyv422:YUYV 4:2:2:640x480 800x600 640x360 352x288 320x240 640x480
干杯。