`
Thomas会Coding
  • 浏览: 96213 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在使用YUV420SP转RGB时遇到的问题

阅读更多

在做人脸识别的时候,需要把Camera预览的图像保存成一张图片,在网上找到了以下的方法

static public void decodeYUV420SP(byte[] rgb, byte[] yuv420sp, int width, int height) {
		final int frameSize = width * height;
		int yp = 0;
		for (int j = 0; j < height; j++) {
			int uvp = frameSize + (j >> 1) * width, u = 0, v = 0;
			for (int i = 0; i < width; i++) {
				int y = (0xff & ((int) yuv420sp[yp])) - 16;
				if (y < 0) y = 0;
				if ((i & 1) == 0) {
					v = (0xff & yuv420sp[uvp++]) - 128;
					u = (0xff & yuv420sp[uvp++]) - 128;
				}	
				int y1192 = 1192 * y;
				int r = (y1192 + 1634 * v);
				int g = (y1192 - 833 * v - 400 * u);
				int b = (y1192 + 2066 * u);
			//	if (r < 0) r = 0; 
				if (r > 262143) 
					r = 262143;
			//	if (g < 0) g = 0; 
				if (g > 262143) 
					g = 262143;
			//	if (b < 0) b = 0; 
				if (b > 262143)
					 b = 262143;
				
				rgb[3*yp] = (byte) ((r >> 10) & 0xff);
				rgb[3*yp+1] = (byte) ((g >> 10) & 0xff);
				rgb[3*yp+2] = (byte) ((b >> 10) & 0xff);
				++yp;
			}
		}
	}  
} // end of ProcessImageAndDrawResults class

 原始的方法中是没有上面的三个注释的。为了保持图片的RGB的值在0-262143.但是使用上面的方法是发现图片特别不清晰,显示偏红,后面找原因才发现,因为对RGB值的限制,导致了很多的点都被过滤掉了。当按照上面的方法把小于0的限制去掉时,便没有这样的问题了,但可能会在强光的情况下有亮蓝色显示。这点暂时还没有解决。

分享到:
评论

相关推荐

    yuv420sp(NV21)转RGB的核心代码以及多线程

    在图像处理领域,YUV420sp(也称为NV21)是一种常见的颜色空间编码方式,主要用于视频压缩和传输,因为它比RGB等其他颜色空间更节省存储空间。本话题将深入探讨如何将YUV420sp转换为RGB,并涉及多线程优化。 首先,...

    C/C++源码,图像RGB转换为YUV420sp和YUV420sp格式转换为YUV422

    C/C++ 源码,图像RGB格式转换为YUV420格式和图像YUV420sp格式转换为YUV422,亲测有效,已经得到验证过

    YUV420与RGB24转换

    YUV420和RGB24是两种常见的颜色模型,它们在不同的场景下各有优势。本文将深入探讨这两种颜色模型的特性和转换过程。 首先,让我们了解YUV420。这是一种为节省存储空间和带宽而设计的颜色模型,广泛应用于视频编码...

    rgb转yuv420sp_nv12 硬件加速(opengl es,shader)

    rgb转yuv420sp_nv12的硬件加速,opengles 的shader实现

    YUV420图像数据转换成RGB888和RGB565位图文件

    将YUV420图像数据转换成RGB888和RGB565位图文件;包含YUV420解码算法;YUV数据到RGB数据的转换算法;生成RGB888位图和RGB565位图的BITMAP文件格式算法;相关算法与函数都有详细的注释信息。

    RGB888转NV21(yuv420sp)源代码详解

    而NV21则是YUV420sp(即Planar Y'CbCr 4:2:0 semi-planar)的一种变种,广泛用于手机和平板设备,以节省存储空间和提高处理效率。 NV21的结构分为三部分:Y(亮度)、U(蓝色差)和V(红色差)。Y占据了图像的全部...

    android yuv420sp叠加osd

    2. **YUV到RGB转换**: 使用`YUV420ToARGB8888`函数将YUV数据转换为RGB格式,以便在Android的Canvas上操作。 3. **绘制OSD信息**: 在转换后的RGB Bitmap上使用`Canvas`对象绘制文本、图形等OSD信息。这可能包括时间戳...

    rgb24转yuv420高效率 完整代码,C++实现

    RGB24到YUV420的转换是图像处理领域中的常见操作,特别是在视频编码和解码中。这种转换涉及到将RGB色彩空间的数据转换为YUV色彩空间,以节省存储空间和提高编码效率。在C++中实现这个过程,我们可以从以下几个方面来...

    rgb转yuv420源代码(C语言)

    它首先遍历所有RGB像素,按照上述公式计算Y分量,然后处理U和V分量,注意它们是以半分辨率存储的,并且在处理U、V时,要考虑到YUV420的隔行存储特性。 在实际应用中,你可能需要考虑内存分配、错误处理和优化等细节...

    Qt播放YUV420P文件

    零开始学习音视频编程技术(十五) YUV420P转RGB32 在转换的基础加上了Qt显示的界面。实现了Qt播放YUV420P文件 这是Qt的工程,建议使用Qt Creator 打开 Qt的版本是4.8.4,当然是用Qt5也是没有影响的,不过编译器...

    yuv420转rgb565

    ### YUV420转RGB565:深入解析与实现 #### 一、YUV420格式介绍 在图像处理领域,YUV是一种广泛使用的颜色空间模型,它将图像的颜色信息分解为亮度(Y)和色度(U、V)两个分量。其中,Y代表亮度(Luminance),而U...

    1920x1080_yuv420sp,1920*1080的yuv420sp数据一帧

    在计算机程序中,处理YUV 420sp帧时,需要先读取Y平面的所有像素值,然后按照U和V的采样位置,结合Y值来恢复每个像素的RGB值。这个过程涉及插值算法,以便从较少的色度信息中推断出完整的色彩信息。 此外,处理YUV...

    色彩空间转换 rgb2yuv420

    利用opencv开源库,c++实现rgb转yuv420

    FFmpeg实现YUV420P视频序列转RGB24视频序列(VC2010)

    在这个场景中,我们关注的是如何使用FFmpeg库在C++环境下,将YUV420P视频序列转换为RGB24视频序列,具体操作在Visual Studio 2010(VC2010)下进行。 YUV420P是一种常见的视频色彩空间,它以一种节省带宽的方式存储...

    YUV420转RGB播放器

    在IT领域,尤其是在多媒体处理和视频播放技术中,"YUV420转RGB播放器"是一个关键的应用。这个播放器专门设计用于处理YUV420格式的视频数据,并将其转换为RGB色彩空间,以便在屏幕上正确显示。以下是关于这个主题的...

    YUV转换显示编辑工具YUV420.YUV422

    YUV是一种用于节省带宽和存储空间的颜色模型,特别是在电视和数字视频系统中广泛使用。"YUV转换显示编辑工具YUV420.YUV422"显然是一款专门针对这种颜色格式的软件工具,用于转换、显示和编辑YUV格式的视频数据。 ...

    RGB2YUV.rar_bmp yuv_mmx_rgb yuv420_rgb2yuv_rgb2yuv mmx

    其中,“yuv_mmx_rgb”指的是使用MMX实现的YUV与RGB之间的转换,“yuv420_rgb2yuv”表示YUV420格式的转换,而“rgb2yuv_mmx”则是MMX优化的RGB到YUV转换函数。 描述中提到,这个程序通过MMX指令集实现了宽位处理,...

    matlab实现rgb转化为yuv格式

    用matlab代码rgb转yuv格式(包含yuv420sp,yuv420p,yuv422i等),输出二进制文件和文本文件,其中二进制.yuv文件用yuvplayer软件可以打开正确显示。

    GRAY8、YUV420P、YUV422P、YUV444P、YUYV422、RGB24间任意两个互转

    标题提到的"GRAY8、YUV420P、YUV422P、YUV444P、YUYV422、RGB24间任意两个互转"涵盖了常见的几种颜色格式之间的转换。以下将详细介绍这些格式以及如何进行转换。 1. GRAY8(灰度图像):这种格式仅包含单一的亮度...

    OPENCV读取YUV420格式

    我们可以使用公式手动转换,或者使用预处理函数,如`yuv420spToRgb`,该函数会根据YUV420的布局计算每个像素的RGB值。 4. **创建Mat对象**:OpenCV的`Mat`类是图像处理的核心,它用于表示图像数据。将转换后的RGB...

Global site tag (gtag.js) - Google Analytics