我已经开始编辑RaspiStillYUV.c代码。我最终想要处理我收到的图像,但现在,我只是在努力理解它。为什么我使用YUV而不是RGB?所以我可以学到新的东西。我对功能camera_buffer_callback
做了一些小修改。所有我做的是以下几点:在代码中设置YUV缓冲区结尾的额外字节 - RaspberryPi
现在,尺寸应2592 x 1944
(宽x高):这是更换
fprintf(stderr, "GREAT SUCCESS! %d\n", buffer->length);
线。关闭维基百科(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缓冲区有未使用的尾随字节,但我不知道树莓特定的细节。 –
对于其他人看到这一点。我已经切换到SimpleCV和Python。我的(不是太重)改进的RaspiStillYUV代码在8秒内完成了大约10张图片。 SimpleCV正在做〜7每秒。两个样本都是在没有额外处理的情况下进行的您可以使用uv4l驱动程序将相机作为视频设备使用,以便与SimpleCV一起使用。 – douggard