YUV 和RGB之间转换函数

void myRgb2YUV(int width, int height,  unsigned char *yuv, unsigned char *rgb)

{

for(int i=0;i<width;++i)

{

for(int j=0;j<height;++j)

{

int B=rgb[j*width*3+i*3];

int G=rgb[j*width*3+i*3+1];

int R=rgb[j*width*3+i*3+2];

int Y=int(16.5+(0.2578*R+0.504*G+0.098*B));

int U=int(128.5+(-0.148*R-0.291*G+0.439*B));

int V=int(128.5+(0.439*R-0.368*G-0.071*B));

yuv[j*width*2+i*2+0]=(unsigned char)Y;

if(i%2==1)

{

//yuv[j*width*2+i*2-1]=(unsigned char)U;

//yuv[j*width*2+i*2+1]=(unsigned char)V;

}else

{

yuv[j*width*2+i*2+1]=(unsigned char)U;

yuv[j*width*2+i*2+3]=(unsigned char)V;

}

}

}

}

void myYuv2Rgb(int width, int height,  const unsigned char *yuv, unsigned char *rgb)

{

for(int i=0;i<width;++i)

{

for(int j=0;j<height;++j)

{

int Y=yuv[j*width*2+i*2+0];

int U=yuv[j*width*2+i*2+1];

int V=yuv[j*width*2+i*2+3];

if(i%2==1)

{

U=yuv[j*width*2+i*2-1];

V=yuv[j*width*2+i*2+1];

}

int R=int(Y+1.4075 *(V-128));

int G=int(Y-0.3455*(U-128)-0.7169*(V-128));

int B=int(Y+1.779*(U-128));

R=R;

R=R>255?255:R;

R=R<0?0:R;

G=G>255?255:G;

G=G<0?0:G;

B=B>255?255:B;

B=B<0?0:B;

rgb[j*width*3+i*3]=B;

rgb[j*width*3+i*3+1]=G;

rgb[j*width*3+i*3+2]=R;

}

}

}

时间: 2024-10-07 13:34:54

YUV 和RGB之间转换函数的相关文章

【视频处理】YUV与RGB格式转换

YUV格式具有亮度信息和色彩信息分离的特点,但大多数图像处理操作都是基于RGB格式. 因此当要对图像进行后期处理显示时,需要把YUV格式转换成RGB格式. RGB与YUV的变换公式如下: YUV(256 级别) 可以从8位 RGB 直接计算: Y = 0.299 R + 0.587 G + 0.114 B U = - 0.1687 R - 0.3313 G + 0.5 B + 128 V = 0.5 R - 0.4187 G - 0.0813 B + 128 反过来,RGB 也可以直接从YUV

YUV与RGB格式转换

YUV格式具有亮度信息和色彩信息分离的特点,但大多数图像处理操作都是基于RGB格式. 因此当要对图像进行后期处理显示时,需要把YUV格式转换成RGB格式. RGB与YUV的变换公式如下: YUV(256 级别) 可以从8位 RGB 直接计算: Y = 0.299 R + 0.587 G + 0.114 B U = - 0.1687 R - 0.3313 G + 0.5 B + 128 V = 0.5 R - 0.4187 G - 0.0813 B + 128 反过来,RGB 也可以直接从YUV

YUV到RGB的转换

以下内容来源于网络,下面三个链接里的内容是比较好的,感谢博主的分享. http://blog.csdn.net/housisong/article/details/1859084 http://blog.csdn.net/tommy_wxie/article/details/37909643 http://www.cnblogs.com/qinjunni/archive/2012/04/06/2434393.html   这里有介绍YUV转RGB的优化 位运算和查表法 YUV到RGB的转换公式:

C# Socket发送接收字节数组和十六16进制之间转换函数

近期在使用远程网络模块的时候, 需要用的Socket发送数据,远程模块指令为16进制. 官方提供的DEMO比较繁琐.不方便新手使用. 下面的转换函数可大大方便新手使用. // 16进制字符串转字节数组 格式为 string sendMessage = "00 01 00 00 00 06 FF 05 00 64 00 00"; private static byte[] HexStrTobyte(string hexString) { hexString = hexString.Rep

TColor 与 RGB 的转换函数

function RGB2TColor(const R, G, B: Byte): Integer;begin  // convert hexa-decimal values to RGB  Result := R + G shl 8 + B shl 16;end; procedure TColor2RGB(const Color: TColor; var R, G, B: Byte);begin  R := Color and $FF;  G := (Color shr 8) and $FF;

YUY2(YUV) 与 RGB 格式图片的相互转换 以及 基于YUY2(YUV)的blending

这是一个项目里使用的,API里从pool里取出的格式都是YUY2,但是图像处理的API库中要求都是jepg格式. YUY2经常用于电视制式以及许多摄像头的输出格式.而我们在处理时经常需要将其转化为RGB进行处理,这里简单介绍下YUY2(YUV)与RGB之间相互转化的关系: http://msdn2.microsoft.com/en-us/library/ms893078.aspx YUY2(YUV) To RGB: C = Y - 16 D = U - 128 E = V - 128 R = c

图像色彩空间YUV和RGB的差别

http://blog.csdn.net/scg881008/article/details/7168637 假如是200万像素的sensor,是不是RGB一个pixel是2M,YUV是1M? 首先,200万象素的sensor,就是有2M个pixel;     YUV是电视传输用的名词,一个亮度信号(Y),两个色差信号(U分量.V分量)     YUV(亦称YCrCb)是被欧洲电视系统所采用的一种颜色编码方法(属于PAL).YUV主要用于优化彩色视频信号的传输,使其向后兼容老式黑 白电视.与RG

YUV RGB 格式转换

第一个公式是RGB转YUV(范围0-255)时用的,第二个公式是用在YUV转换RGB(范围0-255)时用的.1. Y = 0.257 * R + 0.504 * G + 0.098 * B + 16; U = -0.148 * R - 0.291 * G + 0.439 * B + 128; V = 0.439 * R - 0.368 * G - 0.071 * B + 128; 黑色:Y=16 ,U= V =128 红色:Y=82 ,U=90,V=240 绿色:Y=145,U=54,V=34

RGB图像数据字符叠加,图像压缩(ijl库),YUV转RGB

jackyhwei 发布于 2010-01-01 12:02 点击:3218次  来自:CSDN.NET 一些非常有用的图像格式转换及使用的源代码,包括RGB图像数据字符叠加,图像压缩(ijl库),YUV转RGB等等. TAG: YUV  YUV转RGB  RGB  BMP转JPG  文字叠加   /**************************************File: yuvrgb24.hDescription: header file for yuvrgb24.cDate: