最近在做人脸识别的项目,所以接触到也采坑了不少关于图像方面的技术,比如RGB、YUV图像格式,今天就主要记录一下常用的几种图像格式:BGR24、NV21、NV12、I420、YUYV…。以下介绍这几种图像格式的内存排列方式。
RGB颜色空间以Red、Green、Blue三种基本色为基础,进行不同程度的叠加,产生丰富而广泛的颜色,所以俗称三基色模式。 常见的RGB格式有:RGB_565、RGB_888、ARGB_8888、ARGB_4444等。但是也有列外,尤其是搞安卓的同学要特别注意,谷歌在这里给我们挖了一个坑,那就是,ARGB_8888和ARGB_4444实际上在底层对应的是 RGBA_8888和RGBA_4444,例如ARGB_8888图像,其像素数据在内存中其实是以R G B A R G B A …的顺序排布的。
Bitmap.java中的内容 public static enum Config { ALPHA_8, RGB_565, /** @deprecated */ @Deprecated ARGB_4444, ARGB_8888, RGBA_F16, HARDWARE; private Config() { } } Bitmap.h中的内容 /** Bitmap pixel format. */ enum AndroidBitmapFormat { /** No format. */ ANDROID_BITMAP_FORMAT_NONE = 0, /** Red: 8 bits, Green: 8 bits, Blue: 8 bits, Alpha: 8 bits. **/ ANDROID_BITMAP_FORMAT_RGBA_8888 = 1, /** Red: 5 bits, Green: 6 bits, Blue: 5 bits. **/ ANDROID_BITMAP_FORMAT_RGB_565 = 4, /** Deprecated in API level 13. Because of the poor quality of this configuration, it is advised to use ARGB_8888 instead. **/ ANDROID_BITMAP_FORMAT_RGBA_4444 = 7, /** Alpha: 8 bits. */ ANDROID_BITMAP_FORMAT_A_8 = 8, };在YUV颜色空间中,Y用来表示亮度,U和V用来表示色度。 常见的YUV格式有以下几大类:
planar: Y、U、V全部连续存储,如I420、YV12,即3个planepacked: Y、U、V交叉存储,如YUYV,即1个planesemi-planar: Y连续存储,U、V交叉存储,如NV21、NV12,即2个planeBGR24图像格式是一种采用24bpp(bit per pixel)的格式。每个颜色通道B、G、R各占8bpp。 排列方式如:
B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G R B G RNV21图像格式属于 YUV颜色空间中的YUV420SP格式,每四个Y分量共用一组U分量和V分量,Y连续排序,U与V交叉排序。 排列方式如:
Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y V U V U V U V U V U V U V U V UNV12图像格式属于 YUV颜色空间中的YUV420SP格式,每四个Y分量共用一组U分量和V分量,Y连续排序,U与V交叉排序(NV12和NV21只是U与V的位置相反)。 排列方式如:
Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y U V U V U V U V U V U V U V U VI420图像格式属于 YUV颜色空间中的YUV420P格式,每四个Y分量共用一组U分量和V分量,Y、U、V各自连续排序。 排列方式如:
Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y U U U U U U U U V V V V V V V VYV12图像格式属于 YUV颜色空间中的YUV420P格式,每四个Y分量共用一组U分量和V分量,Y、U、V各自连续排序(YV12和I420只是U与V的位置相反)。 排列方式如:
Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y V V V V V V V V U U U U U U U UYUYV图像格式属于 YUV颜色空间中的YUV422格式,每两个Y分量共用一组U分量和V分量,Y、U、V交叉排序。 排列方式如:
Y U Y V Y U Y V Y U Y V Y U Y V Y U Y V Y U Y V Y U Y V Y U Y V Y U Y V Y U Y V Y U Y V Y U Y V Y U Y V Y U Y V Y U Y V Y U Y V