【发布时间】:2013-12-19 05:57:41
【问题描述】:
我已经开始编辑 RaspiStillYUV.c 代码。我最终想处理收到的图像,但现在,我只是在努力理解它。为什么我使用 YUV 而不是 RGB?所以我可以学到新的东西。我对函数camera_buffer_callback 做了一些小改动。我正在做的事情如下:
fprintf(stderr, "GREAT SUCCESS! %d\n", buffer->length);
这是替换的行:
bytes_written = fwrite(buffer->data, 1, buffer->length, pData->file_handle);
现在,尺寸应该是代码中设置的2592 x 1944 (w x h)。处理维基百科 (YUV420) 我得出的结论是文件大小应该是w * h * 1.5。因为 Y 分量每个像素有 1 个字节的数据,而 U 和 V 分量每 4 个像素有 1 个字节的数据(1 + 1/4 + 1/4 = 1.5)。伟大的。用 Python 做数学运算:
>>> 2592 * 1944 * 1.5
7558272.0
不幸的是,这与我的程序的输出不一致:
GREAT SUCCESS! 7589376
这会留下 31104 字节的差异。
我认为缓冲区是按固定大小的块分配的(输出大小可以被 512 整除)。虽然我想了解这个谜团,但我对固定大小的块解释很好。
我的问题是我是否遗漏了什么。超出预期大小的额外字节在这种格式中是否有意义?他们应该被忽略吗?我的计算有问题吗?
【问题讨论】:
-
yuv 缓冲区有未使用的尾随字节是很常见的,但我不知道特定于 raspberry 的详细信息。
-
对于看到这个的其他人。我已经切换到 SimpleCV 和 Python。我(不是太重)修改过的 RaspiStillYUV 代码在 8 秒内完成了大约 10 张图像。 SimpleCV 每秒执行约 7 次。两个样本均未进行额外处理。您可以使用 uv4l 驱动程序将相机作为视频设备,以便与 SimpleCV 一起使用。
标签: camera raspberry-pi yuv