YUV422转RGB

c114455 2013-07-19 10:55:25
pBuf格式为YUV格式。即:
char * yBuffer= pBuf+16;
  其中长度为:pFrameInfo->nWidth* 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:2:2
如果在一个for循环中,以Y的长度为准的话,U V 就要溢出啊
在我的理解中,yuv应该一样多才可以
我知道理解错了,可是就是不知到如何错的,所以来请教大家
...全文
346 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
c114455 2013-09-20
  • 打赏
  • 举报
回复
引用 2 楼 lyuan1314 的回复:
YUV422,就是Y、U、V的分量为4:2:2。 如果是YUV444,各个分量就一样多了,4:4:4。 还有一些其他的YUV规格,在网上可以找到很多相关资料。
你看nWidth和nLineSize中的数,不一样(ndwith=1280,nLineSize[0]=1312) 我说的是,这个地方会不会溢出 至于4:2:2 就是y的值用两次就是了
lzcx_flag 2013-08-15
  • 打赏
  • 举报
回复
YUV422数据,简单说是4个Y对应2U2V,Y0Y1Y2Y3U0U2V0V2,补充上U1U3V1V3,就是YUV444一样多了, U1U3V1V3可用U0U2V0V2的值
c114455 2013-07-22
  • 打赏
  • 举报
回复
char * yBuffer= pBuf+16;   //其中长度为:pFrameInfo->nHeight* pFrameInfo->nLinseSize[0]; // 也就是960*1312 个 y 按YUV411的计算方法(UV用四次),这样就能计算出960*1312 组 RGB 但是实际图片大小应该是960*1200 正不解中!!!!!!!!!! ps:YUV数据来自摄像头
EagleAIGC 2013-07-21
  • 打赏
  • 举报
回复
YUV422,就是Y、U、V的分量为4:2:2。 如果是YUV444,各个分量就一样多了,4:4:4。 还有一些其他的YUV规格,在网上可以找到很多相关资料。
c114455 2013-07-19
  • 打赏
  • 举报
回复

这是一些参数

1,451

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计/Flash/Silverlight 开发 图象工具使用
社区管理员
  • 图象工具使用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧