YUV4:2:2转换成RGB的代码

来源:互联网 发布:vmp脱壳软件 编辑:程序博客网 时间:2024/05/20 09:45
转载自;http://blog.csdn.net/chyxwzn/article/details/8444087
 
[cpp] view plaincopyprint?
  1. int convert_yuv_to_rgb_pixel(int y,int u, int v) 
  2. uint pixel32 = 0; 
  3. uchar *pixel = (uchar *)&pixel32; 
  4. int r, g, b; 
  5. r = y + (1.370705 * (v-128)); 
  6. g = y - (0.698001 * (v-128)) - (0.337633 * (u-128)); 
  7. b = y + (1.732446 * (u-128)); 
  8. if(r > 255) r = 255; 
  9. if(g > 255) g = 255; 
  10. if(b > 255) b = 255; 
  11. if(r < 0) r = 0; 
  12. if(g < 0) g = 0; 
  13. if(b < 0) b = 0; 
  14. pixel[0] = r * 220 / 256; 
  15. pixel[1] = g * 220 / 256; 
  16. pixel[2] = b * 220 / 256; 
  17. return pixel32; 
  18. /*yuv格式转换为rgb格式*/ 

[cpp] view plaincopyprint?
  1. int convert_yuv_to_rgb_buffer(uchar *yuv, uchar *rgb, uint width,uint height) 
  2. uint in, out = 0; 
  3. uint pixel_16; 
  4. uchar pixel_24[3]; 
  5. uint pixel32; 
  6. int y0, u, y1, v; 
  7. for(in = 0; in < width * height * 2; in += 4) { 
  8.   pixel_16 = 
  9.    yuv[in + 3] << 24 | 
  10.    yuv[in + 2] << 16 | 
  11.    yuv[in + 1] <<  8 | 
  12.    yuv[in + 0];//YUV422每个像素2字节,每两个像素共用一个Cr,Cb值,即u和v,RGB24每个像素3个字节 
  13.   y0 = (pixel_16 & 0x000000ff); 
  14.   u  = (pixel_16 & 0x0000ff00) >>  8; 
  15.   y1 = (pixel_16 & 0x00ff0000) >> 16; 
  16.   v  = (pixel_16 & 0xff000000) >> 24; 
  17.   pixel32 = convert_yuv_to_rgb_pixel(y0, u, v); 
  18.   pixel_24[0] = (pixel32 & 0x000000ff); 
  19.   pixel_24[1] = (pixel32 & 0x0000ff00) >> 8; 
  20.   pixel_24[2] = (pixel32 & 0x00ff0000) >> 16; 
  21.   rgb[out++] = pixel_24[0]; 
  22.   rgb[out++] = pixel_24[1]; 
  23.   rgb[out++] = pixel_24[2];//rgb的一个像素 
  24.   pixel32 = convert_yuv_to_rgb_pixel(y1, u, v); 
  25.   pixel_24[0] = (pixel32 & 0x000000ff); 
  26.   pixel_24[1] = (pixel32 & 0x0000ff00) >> 8; 
  27.   pixel_24[2] = (pixel32 & 0x00ff0000) >> 16; 
  28.   rgb[out++] = pixel_24[0]; 
  29.   rgb[out++] = pixel_24[1]; 
  30.   rgb[out++] = pixel_24[2]; 
  31. return 0; 

V4L2_PIX_FMT_YUYV — Packed format with ½ horizontal chroma resolution, also known as YUV 4:2:2

In this format each four bytes is two pixels. Each four bytes is two Y's, a Cb and a Cr. Each Y goes to one of the pixels, and the Cb and Cr belong to both pixels. As you can see, the Cr and Cb components have half the horizontal resolution of the Y component.V4L2_PIX_FMT_YUYV is known in the Windows environment as YUY2.

Color Sample Location.

 0 1 2 30YCY YCY1YCY YCY2YCY YCY3YCY YCY
0 0
原创粉丝点击