cv::cvtColor 获取错误尺寸的图片

cv::cvtColor gets wrong size image

我正在使用以下代码将RGB格式图像转换为YUVI420格式图像,但结果i420Mat在颜色和尺寸上都是错误的。

cv::cvtColor(rgbMat, i420Mat, CV_RGB2YUV_I420);

源 rgbMat(RGB 格式):列:480,行:640;

对应CIImage:

目标 i420Mat(YUVI420 格式):列:480,行:960;

对应CIImage:

理想情况下,它们应该保持相同的大小,对吗?

不,它不应该保持相同的大小,因为 YUV_I420 是平面的。请注意,输入图像是 3 通道,但输出图像是 1 通道。

图像尺寸较大,因为图像的顶部(640*480)代表Y'平面(亮度),底部对应地代表U和V分量。所以所有的颜色平面都在一个单通道图像上表示,所以它有更大的尺寸。参见维基百科的图片:

Y'平面与灰度图像完全相同。

为什么我们在底部看到四张图片?

上两图对应U平面。左图为偶数行,右图为奇数行。底部V面也一样

有关更多信息,请阅读 wikipedia, and fourcc.org 中的精彩文章。