将YUV数据转换为RGB数据

void NV12_T_RGB(unsigned int width , unsigned int height , unsigned char *yuyv , unsigned char *rgb)

{

const int nv_start = width * height ;

uint32_t  i, j, index = 0, rgb_index = 0;

uint8_t y, u, v;

int r, g, b, nv_index = 0;

for(i = 0; i <  height ; i++)

{

for(j = 0; j < width; j ++){

//nv_index = (rgb_index / 2 - width / 2 * ((i + 1) / 2)) * 2;

nv_index = i / 2  * width + j - j % 2;

y = yuyv[rgb_index];

u = yuyv[nv_start + nv_index + 1];

v = yuyv[nv_start + nv_index ];

r = y + (140 * (v-128))/100;  //r

g = y - (34 * (u-128))/100 - (71 * (v-128))/100; //g

b = y + (177 * (u-128))/100; //b

if(r > 255)  r = 255;

if(g > 255)  g = 255;

if(b > 255)  b = 255;

if(r < 0)    r = 0;

if(g < 0)    g = 0;

if(b < 0)    b = 0;

index = rgb_index % width + (height - i - 1) * width;

rgb[index * 3+0] = b;

rgb[index * 3+1] = g;

rgb[index * 3+2] = r;

rgb_index++;

}

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,792评论 0 33
  • 由于H.264等压缩算法都是在YUV的颜色空间上进行的,所有在进行压缩前,首先要进行颜色空间的转换。如果摄像头采集...
    眷卿三世阅读 13,725评论 2 6
  • 忙碌而充实的一天落下帷幕。从早上五点半到下午五点半,整整十二个小时,满满的收获与感动。 摸黑从床上爬起来,匆忙洗漱...
    八七在路上阅读 235评论 2 3
  • 我曾在很多座城市守候落日,相比起看太阳冉冉升起,地平线上的第一抹微光。 我总觉得落日是更具有仪式感的,也因日出的必...
    逃遁之地阅读 873评论 5 11
  • 你沉默的时候,是我喜欢的模样。 你生气的时候,是我喜欢的模样。 每一个你,完美的不完美的,都是我喜欢的模样。 年少...
    奈奈的西瓜阅读 202评论 0 0