我使用以下代码将RGB格式图像转换为YUVI420格式图像,但结果i420Mat的颜色和大小有误。
cv::cvtColor(rgbMat, i420Mat, CV_RGB2YUV_I420);
源rgbMat(RGB格式):cols:480,rows:640;
对应的CIImage:
目的地i420Mat(YUVI420格式):cols:480,行:960;
对应的CIImage:
理想情况下,它们应保持相同的大小,对吧?
答案 0 :(得分:5)
不,它不应该保持相同的大小,因为YUV_I420是平面的。请注意输入图像为3通道,但输出图像为1通道。
图像尺寸较大,因为图像的上半部分(640 * 480)代表Y'平面(亮度),底部相应地表示U和V分量。因此,所有颜色平面都在一个单通道图像上表示,因此它具有更大的尺寸。请参阅维基百科的图片:
Y'#39;平面与灰度图像非常相似。
为什么我们在底部看到四张图片?
前两个图像对应U平面。左图是偶数行,右图是奇数行。底部的V平面也是如此。
有关其他信息,请阅读wikipedia和fourcc.org中的好文章。