我在C ++程序中的缓冲区大小有一个小问题。 我使用V4L2从相机中获取YUYV图像(示例可用here)
我想拍摄一张图片并将其放入我自己的图片结构中。 这是V4L2结构给出的缓冲区及其大小
(uchar*)buffers_[buf.index].start, buf.bytesused
在我的结构中,我创建了一个新的缓冲区(mybuffer),其大小为width * height * bitSize(字节大小为4,因为我抓住了YUYV或YUV422图像)。
问题在于我期望缓冲区 buf 与我创建的缓冲区大小相同。但事实并非如此,例如当我抓住640 * 480图像buf = 614400而mybuffer = 1228800(两倍大)时。
有谁知道为什么会这样?
答案 0 :(得分:1)
YUV422 每 2个像素使用 4个字节
在 YUV422 模式下,U
ans V
值在两个像素之间共享。 Image中的字节的排序方式与U0 Y0 V0 Y1 U2 Y2 V2 Y3
等相同。
给出像这样的像素:
pixel 0 U0Y0V0
pixel 1 U0Y1V0
pixel 2 U2Y2V2
pixel 3 U2Y3V2