cv :: cvtColor获取错误的大小图像

时间:2016-02-04 07:15:19

标签: c++ opencv yuv

我使用以下代码将RGB格式图像转换为YUVI420格式图像,但结果i420Mat的颜色和大小有误。

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

源rgbMat(RGB格式):cols:480,rows:640;

对应的CIImage:

enter image description here

目的地i420Mat(YUVI420格式):cols:480,行:960;

对应的CIImage:

enter image description here

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

1 个答案:

答案 0 :(得分:5)

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

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

enter image description here

Y'#39;平面与灰度图像非常相似。

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

前两个图像对应U平面。左图是偶数行,右图是奇数行。底部的V平面也是如此。

有关其他信息,请阅读wikipediafourcc.org中的好文章。