首页 新闻 会员 周边 捐助

YUV转RGB

0
悬赏园豆:10 [待解决问题]

pBuf格式为YUV格式。即:
char * yBuffer= pBuf+16;
  其中长度为:pFrameInfo->nHeight * pFrameInfo->nLinseSize[0];
Char * uBuffer= yBuffer + pFrameInfo->nHeight * pFrameInfo->nLinseSize[0];
  其中长度为:pFrameInfo-> nHeight * pFrameInfo->nLinseSize[1]/2;
Char * vBuffer= uBuffer + pFrameInfo->nHeight * pFrameInfo->nLinseSize[1]/2;
  其中长度为:pFrameInfo->nHeight * pFrameInfo->nLinseSize[2]/2;
注意:对于视频数据,前面有16个字节为YUV行扫描长度。

这就是我的YUV数据
如何转成RGB呢?


我查了一些资料
比如:
// YCbCr转换为RGB
for(i =0 ; i < dest->dwSize; )
{
   UCHAR y,u,v;
   y = sBuf[i+0];
   u = sBuf[i+1];
   v = sBuf[i+2];
   double temp;
   temp = 1.164383*(y- 16) + 0 + 1.596016*(v - 128);
   dBuf[i] = (unsigned char)(temp < 0 ? 0 : (temp > 255 ? 255 : temp));
   temp = (1.164383*(y- 16) - 0.391762*(u - 128) - 0.812969*(v - 128));
   dBuf[i + 1] = (unsigned char)(temp < 0 ? 0 : (temp > 255 ? 255 : temp));
   temp = 1.164383*(y- 16) + 2.017230*(u - 128) + 0;
   dBuf[i + 2] = (unsigned char)(temp < 0 ? 0 : (temp > 255 ? 255 : temp));
   i += 3;
}



可是有一事不明
Y:U:V=4:1:1
如果在一个for循环中,以Y的长度为准的话,U V 就要溢出啊
在我的理解中,yuv应该一样多才可以
我知道理解错了,可是就是不知到如何错的,所以来请教大家

 
还有,这到底是什么格式,YUV420,YUV411,还是商家自定义的?可恨SDK中没有详细介绍,我正发愁如何解码成RGB。。
myexceptions的主页 myexceptions | 初学一级 | 园豆:192
提问于:2013-07-19 15:58
< >
分享
所有回答(1)
0

yuv格式很多,你得咨询下获取到视频的设备提供商到底是采用什么格式的yuv,才能正确解码。可以看看http://blog.csdn.net/searchsun/article/details/2443867这篇文章介绍了yuv的知识,yuv有打包(packed)格式和平面(planar)格式,不同格式yuv存储方式不同,http://www.cnblogs.com/niloc/archive/2012/05/10/2495033.html#2731597这篇文章提到的hik的视频就是planar格式的yv12格式。对于4:1:1的问题,重复使用u和v,改写循环中u和v获取方式就可以了。

niloc | 园豆:202 (菜鸟二级) | 2013-07-28 20:00

你的pFrameInfo->nLinseSize放的是什么,是满足下面这样的关系吗

nLineSize[0] == nWidth(像素宽),nLineSize[1] == nLineSize[2] == nLineSize[0] / 2

我猜是的,否则就不满足4:1:1的关系。

int iSrc = 0;

for (int i =0 ; i < dest->dwSize;)

{

  y = yBuf[iSrc];
  u = uBuf[iSrc / 4];
  v = vBuf[iSrc / 4];

  // ...

  i += 3;

  ++iSrc;

}

按照上面的公式,一个得到的分量顺序分别是:y0 u0 v0; y1 u0 v0; y2 u0 v0; y3 u0 v0; y4 u1 v1,...每个u和v都被使用4次,个数也就和y分量个数相同。

支持(0) 反对(0) niloc | 园豆:202 (菜鸟二级) | 2013-07-28 20:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册