CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  图形图像/机器视觉

急!请教:如何进行YUV422与RGB24之间的转换?

楼主huamy(虹)2004-09-03 14:40:58 在 专题开发/技术/项目 / 图形图像/机器视觉 提问

请教如何进行YUV422格式与RGB24格式之间的数据转换?因为我的从开发板上得到的数据是YUV422格式的数据,要将其转换成RGB24格式;最后还要将RGB24图像转化成YUV422格式,已提供给相应的输出设备。  
          如何进行YUV422-->RGB24,以及RGB24-->YUV422的变换?  
  其中:YUV422的三个分量各用一个数组存储,既是比如1024个象素的图像,其YUV数据分别存储于CHAR   Y[1024];   CHAR   U[512],   V[512]中,现在如何进行RGB24格式的转换?再如何将RGB24还原回YUV422?  
           
          看到有很多资料上对YUV-RGB之间的变换关系矩阵有很多种,请问,它们各个矩阵的意义与区别?各自适用于何种情况?有的要减去一个常数128、0.5又是什么意思?  
           
          这是我看到的主要的几种变换关系:  
   
  1)  
  Y   =   0.299R   +   0.587G   +   0.114B  
  U   =   -0.147R   -   0.289G   +   0.436B  
  V   =   0.615R   -   0.515G   -   0.100B  
   
  R   =   Y   +   1.14V  
  G   =   Y   -   0.39U   -   0.58V  
  B   =   Y   +   2.03U  
   
  2)  
  YUV与RGB图象之间的变换关系:  
  Y=   0.2990R+0.5870G+0.1140B  
  U=-0.1687R-0.3313G+0.5000B   +   128  
  V=   0.5000R-0.4187G-0.0813B   +   128  
  反变换关系:  
  R=   1.0Y   +   0   +1.402   (V-128)  
  G=   1.0Y   -   0.34413(U-128)-0.71414(V-128)  
  B=   1.0Y   +   1.772   (U-128)+0  
   
  3)  
  Y601   =   (16842*R   +   33030*G+   6423*B)/65535   +   16  
  Cb   =   (–9699*R   –   19071*G+   28770*B)/65536   +   128  
  Cr   =   (28770*R–   24117*G–   4653*B)/65536   +   128  
   
  R=   1.164(Y601   –   16)   +   1.596(Cr   –   128)  
  G=   1.164(Y601   –   16)   –   0.813(Cr   –   128)   –0.391(Cb   –   128)  
  B=   1.164(Y601   –   16)   +   2.018(Cb   –   128)  
   
  不明白:  
  a)第一种与第二种之间的区别:何时要加减128?为何有的又不是128而是16?  
  b)第二种与第三种的区别:为何第三种的系数要大些?  
  c)他们各自的RGB与YUV的取值范围是多少?  
   
  问题点数:0、回复次数:10Top

1 楼huamy(虹)回复于 2004-09-03 14:41:51 得分 0

写的有点罗嗦,对不起了Top

2 楼huamy(虹)回复于 2004-09-03 19:16:55 得分 0

help   me!!Top

3 楼psusong(栀子花开)回复于 2004-09-03 21:47:43 得分 0

easy,Top

4 楼hell190109()回复于 2004-09-04 15:51:00 得分 0

yuv2rgb  
  00925   ()  
  00926   {  
  00927           AssertThis;  
  00928    
  00929           AssertReturn1(buf);  
  00930    
  00931           for   (ulong   x=0;   x<width;   x++)  
  00932                   for   (ulong   y=0;   y<height;   y++)  
  00933                   {  
  00934                           float   r,g,b,   yy,u,v;  
  00935    
  00936                           yy   =   buf[(x+y*width)*4+0];  
  00937                           u   =   buf[(x+y*width)*4+1];  
  00938                           v   =   buf[(x+y*width)*4+2];  
  00939    
  00940                           r   =   yy   +   1.403f;  
  00941                           g   =   yy   -   0.344f*u   -   0.714f*v;  
  00942                           b   =   yy   +   1.770f*u;  
  00943    
  00944                           buf[(x+y*width)*4+0]=(char)r;  
  00945                           buf[(x+y*width)*4+1]=(char)g;  
  00946                           buf[(x+y*width)*4+2]=(char)b;  
  00947                   }  
  00948           dirty   =   true;  
  00949   }  
  Top

5 楼huamy(虹)回复于 2004-09-05 12:25:28 得分 0

上面这位老兄的程序对我的问题没有我所提问题的答案在里面呀。而且你的程序中没有考虑浮点运算转化为定点运算的问题,除了速度上的影响外,还有有的处理器是不支持浮点运算的。这是其一。  
  其二,我对那几个转换式的概念理解上不太明白,不知他们各自的含义;这些转换式都是收集到的资料上看到的,形式各异,请问有对YUV-->RGB比较了解的人可否详细解释一下?!Top

6 楼huamy(虹)回复于 2004-09-05 12:42:03 得分 0

to   psusong(Think   Different):  
  可否帮帮忙,为我解答一下这个问题?Top

7 楼liuxiaoyi666(MSMVP 小猪妹荣誉马甲之八卦兔子)回复于 2004-09-05 13:45:51 得分 0

想睡觉了,不想写了,帮你顶一下,困Top

8 楼hell190109()回复于 2004-09-05 23:47:06 得分 0

128是为了符号转换    
  0.5是为了取整时四舍五入Top

9 楼jus4u()回复于 2004-09-10 22:30:57 得分 0

hell190109()   的观点正确,在下补充:  
   
  a)第一种与第二种之间的区别:何时要加减128?为何有的又不是128而是16?  
   
        两者的区别是保存图像一个通道是用signed   char还是unsigned   char。  
        另外,公式系数常有细微差别,不足为怪,并无绝对正误。  
   
  b)第二种与第三种的区别:为何第三种的系数要大些?  
   
        YCrCb是YUV的一个变种,系数大是为了以整数运算代替浮点运算.  
        这是一种常用手法,也正是你需要的。比如公式1,更常见的做法是:  
              Y   =   (299R   +   587G   +   114B)/1000  
              ......  
   
   
  c)他们各自的RGB与YUV的取值范围是多少?  
        取值范围是   [0,255]   或   [-128,127]  
   
  另:我一般用1Top

10 楼gqlyxg1981(飞翔)回复于 2004-09-29 10:39:36 得分 0

顶Top

相关问题

  • 急, RGB 怎么转换成 YV12(YUV 4:2:0)?
  • 做了RGB TO YUV的转换,有颜色偏差
  • 求:RGB和HSL,YUV,YCbCr,Gamma等常用色系之间的转换算法.
  • 求:RGB和HSL,YUV,YCbCr,Gamma等常用色系之间的转换算法.
  • 谁有rgb到hls转换的公式?? 急。 在线等待
  • 急求HSB(HSV)转换为RGB的解决办法
  • 急求HSB(HSV)转换为RGB的解决办法
  • YUV格式的图像是不是转换成RGB格式后才能显示出来彩色图像?
  • 24bit RGB颜色到16bit的转换?
  • 求RGB到HSI的转换公式

关键词

  • 转换
  • 图像
  • 数据
  • yuv
  • rgb
  • 格式
  • 区别
  • 系数
  • 变换关系
  • 取值范围

得分解答快速导航

  • 帖主:huamy

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo