NV12和NV21转rgb

void NV21_T_RGB(unsigned int width , unsigned int height , unsigned char *yuyv , unsigned char *rgb)
{
const int nv_start = width * height ;
    u32  i, j, index = 0, rgb_index = 0;
    u8 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 ];
			v = yuyv[nv_start + nv_index + 1];

			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++;
		}
    }
    return 0;

}

以上是NV21转rgb,那么NV12转rgb怎么写呢?很简单,将u、v两句代码互换就可以了。

时间: 2024-09-17 04:06:50

NV12和NV21转rgb的相关文章

入门视频采集与处理(学会分析YUV数据)

做视频采集与处理,自然少不了要学会分析YUV数据.因为从采集的角度来说,一般的视频采集芯片输出的码流一般都是YUV数据流的形式,而从视频处理(例如H.264.MPEG视频编解码)的角度来说,也是在原始YUV码流进行编码和解析,所以,了解如何分析YUV数据流对于做视频领域的人而言,至关重要.本文就是根据我的学习和了解,简单地介绍如何分析YUV数据流.     YUV,分为三个分量,"Y"表示明亮度(Luminance或Luma),也就是灰度值:而"U"和"V

视频YUV数据介绍

做视频采集与处理,自然少不了要学会分析YUV数据.因为从采集的角度来说,一般的视频采集芯片输出的码流一般都是YUV数据流的形式,而从视频处理(例如H.264.MPEG视频编解码)的角度来说,也是在原始YUV码流进行编码和解析,所以,了解如何分析YUV数据流对于做视频领域的人而言,至关重要.本文就是根据我的学习和了解,简单地介绍如何分析YUV数据流.     YUV,分为三个分量,"Y"表示明亮度(Luminance或Luma),也就是灰度值:而"U"和"V

Video for Linux Two API Specification revision0.24【转】

转自:http://blog.csdn.net/jmq_0000/article/details/7536805#t136 Video for Linux Two API Specification Revision 0.24 Michael H Schimek             <mschimek@gmx.at>            Bill Dirks Hans Verkuil Martin Rubli Copyright 1999, 2000, 2001, 2002, 2003,

常用YUV转RGB代码

常用YUV转RGB  [java] view plaincopyprint? public class YuvToRGB {       private static int R = 0;       private static int G = 1;       private static int B = 2;       //I420是yuv420格式,是3个plane,排列方式为(Y)(U)(V)       public static int[] I420ToRGB(byte[] sr

数字图像处理-【求助】YUV格式转RGB

问题描述 [求助]YUV格式转RGB 5C R=Y+1.140VG=Y-0.395U-VB=Y+2.032U Y取值[16235]UV取值[16240]照这个取值那么计算出来的RGB范围不就>255了么? 我认为的解决方案:1:大于255按255计2:归一化 请问有哪位知道怎么处理丫,求救 解决方案 网上有具体的转换方法,可以找找,以前也遇到这问题,后来就用网上的办法解决的 解决方案二: 刚刚才学摄像头,目前还不能解答你这个问题.学完了应该可以解答了 解决方案三: public class Yu

YUV转RGB(NV21-ARGB)的Neon优化代码

说明 此代码仅限于 NV21 格式转 ARGB 格式. NV21 格式中,Y 单独存储,UV分量交错存储. 使用如下公式: R = Y + 1.402*(V-128); G = Y - 0.34414*(U-128) - 0.71414*(V-128); B = Y + 1.772*(U-128); 浮点乘法用 6位精度处理(即a*b = ((a << 6)*b )>>6) 代码 #ifdef HAS_NEON #include <arm_neon.h> #endif

YUV RGB 常见视频格式解析

I420是YUV格式的一种,而YUV有packed format和planar format两种,而I420属于planar format的一种. 同时I420表示了YUV的采样比例4:2:0.4:2:0的YUV并不是说没有V分量,而是指对于每一个行,只有一个U或者V分量.比如第一行里,是YUYYUY,到了第二行是YVYYVY,那么对于每一行来说就是4:2:0或者4:0:2.需要说明的是,这里的排列方式是针对packedformat而言的,因此并不适用于I420这样的planar format.

大师教你用RGB曲线修正相片颜色

  世界级Photoshop专家兼艾美奖(Emmy Award)得主Russell Brown和大家分享了个简易又效果显著的后期技巧!他通过RGB Curves来修正灰蒙蒙.对比度低的影像,而这个方法背后的意义在于只用文件内的信息来增加影像对比度而不流失细节,相比起平常单独使用亮度/对比,会更加精细. 接下来就来看Russell 示范如何用Photoshop以几个超简单的步骤来修正影像颜色,让影像更富电影感! 1)打开文件后,新增一个曲线图层. 2)选择"Red",这时我们会看到红色频

rgb转换byte数组-rgb转byte数组应该怎么处理

问题描述 rgb转byte数组应该怎么处理 我在看YUV420SP转RGB的时候有如下一段java代码if (r < 0) r = 0; else if (r > 262143) r = 262143; if (g < 0) g = 0; else if (g > 262143) g = 262143; if (b < 0) b = 0; else if (b > 262143) b = 262143; rgbBuf[yp * 3] = (byte)(r >>