在做人脸识别的时候,需要把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转换为RGB,并涉及多线程优化。 首先,...
C/C++ 源码,图像RGB格式转换为YUV420格式和图像YUV420sp格式转换为YUV422,亲测有效,已经得到验证过
YUV420和RGB24是两种常见的颜色模型,它们在不同的场景下各有优势。本文将深入探讨这两种颜色模型的特性和转换过程。 首先,让我们了解YUV420。这是一种为节省存储空间和带宽而设计的颜色模型,广泛应用于视频编码...
将YUV420图像数据转换成RGB888和RGB565位图文件;包含YUV420解码算法;YUV数据到RGB数据的转换算法;生成RGB888位图和RGB565位图的BITMAP文件格式算法;相关算法与函数都有详细的注释信息。
rgb转yuv420sp_nv12的硬件加速,opengles 的shader实现
2. **YUV到RGB转换**: 使用`YUV420ToARGB8888`函数将YUV数据转换为RGB格式,以便在Android的Canvas上操作。 3. **绘制OSD信息**: 在转换后的RGB Bitmap上使用`Canvas`对象绘制文本、图形等OSD信息。这可能包括时间戳...
而NV21则是YUV420sp(即Planar Y'CbCr 4:2:0 semi-planar)的一种变种,广泛用于手机和平板设备,以节省存储空间和提高处理效率。 NV21的结构分为三部分:Y(亮度)、U(蓝色差)和V(红色差)。Y占据了图像的全部...
RGB24到YUV420的转换是图像处理领域中的常见操作,特别是在视频编码和解码中。这种转换涉及到将RGB色彩空间的数据转换为YUV色彩空间,以节省存储空间和提高编码效率。在C++中实现这个过程,我们可以从以下几个方面来...
它首先遍历所有RGB像素,按照上述公式计算Y分量,然后处理U和V分量,注意它们是以半分辨率存储的,并且在处理U、V时,要考虑到YUV420的隔行存储特性。 在实际应用中,你可能需要考虑内存分配、错误处理和优化等细节...
在计算机程序中,处理YUV 420sp帧时,需要先读取Y平面的所有像素值,然后按照U和V的采样位置,结合Y值来恢复每个像素的RGB值。这个过程涉及插值算法,以便从较少的色度信息中推断出完整的色彩信息。 此外,处理YUV...
零开始学习音视频编程技术(十五) YUV420P转RGB32 在转换的基础加上了Qt显示的界面。实现了Qt播放YUV420P文件 这是Qt的工程,建议使用Qt Creator 打开 Qt的版本是4.8.4,当然是用Qt5也是没有影响的,不过编译器...
### YUV420转RGB565:深入解析与实现 #### 一、YUV420格式介绍 在图像处理领域,YUV是一种广泛使用的颜色空间模型,它将图像的颜色信息分解为亮度(Y)和色度(U、V)两个分量。其中,Y代表亮度(Luminance),而U...
利用opencv开源库,c++实现rgb转yuv420
在这个场景中,我们关注的是如何使用FFmpeg库在C++环境下,将YUV420P视频序列转换为RGB24视频序列,具体操作在Visual Studio 2010(VC2010)下进行。 YUV420P是一种常见的视频色彩空间,它以一种节省带宽的方式存储...
标题提到的"GRAY8、YUV420P、YUV422P、YUV444P、YUYV422、RGB24间任意两个互转"涵盖了常见的几种颜色格式之间的转换。以下将详细介绍这些格式以及如何进行转换。 1. GRAY8(灰度图像):这种格式仅包含单一的亮度...
在IT领域,尤其是在多媒体处理和视频播放技术中,"YUV420转RGB播放器"是一个关键的应用。这个播放器专门设计用于处理YUV420格式的视频数据,并将其转换为RGB色彩空间,以便在屏幕上正确显示。以下是关于这个主题的...
YUV是一种用于节省带宽和存储空间的颜色模型,特别是在电视和数字视频系统中广泛使用。"YUV转换显示编辑工具YUV420.YUV422"显然是一款专门针对这种颜色格式的软件工具,用于转换、显示和编辑YUV格式的视频数据。 ...
其中,“yuv_mmx_rgb”指的是使用MMX实现的YUV与RGB之间的转换,“yuv420_rgb2yuv”表示YUV420格式的转换,而“rgb2yuv_mmx”则是MMX优化的RGB到YUV转换函数。 描述中提到,这个程序通过MMX指令集实现了宽位处理,...
用matlab代码rgb转yuv格式(包含yuv420sp,yuv420p,yuv422i等),输出二进制文件和文本文件,其中二进制.yuv文件用yuvplayer软件可以打开正确显示。
我们可以使用公式手动转换,或者使用预处理函数,如`yuv420spToRgb`,该函数会根据YUV420的布局计算每个像素的RGB值。 4. **创建Mat对象**:OpenCV的`Mat`类是图像处理的核心,它用于表示图像数据。将转换后的RGB...