2

我在 C++ 程序中的缓冲区大小有一个小问题。我使用 V4L2 从相机中获取 YUYV 图像(此处提供示例)

我想拍摄一张图像并将其放入我自己的图像结构中。这是V4L2结构给出的缓冲区及其大小

(uchar*)buffers_[buf.index].start, buf.bytesused

在我的结构中,我创建了一个大小为 width*height*bitSize 的新缓冲区(mybuffer)(字节大小为 4,因为我抓取了 YUYV 或 YUV422 图像)。

问题是我希望缓冲区buf与我创建的缓冲区大小相同。但情况并非如此,例如当我抓取一个 640*480 的图像 buf=614400 和 mybuffer=1228800(两倍大)时。

有谁知道为什么会这样?

4

1 回答 1

1

YUV4222 个像素使用4 个字节

YUV422模式下,UansV值在两个像素之间共享。图像中的字节按U0 Y0 V0 Y1 U2 Y2 V2 Y3等顺序排列。

给出如下像素:

pixel 0   U0Y0V0
pixel 1   U0Y1V0
pixel 2   U2Y2V2
pixel 3   U2Y3V2
于 2013-05-04T22:00:51.770 回答