图像实战 - RGB、YUV图像格式介绍

最近在作人脸识别的项目,因此接触到也采坑了很多关于图像方面的技术,好比RGB、YUV图像格式,今天就主要记录一下经常使用的几种图像格式:BGR2四、NV2一、NV十二、I420、YUYV…。如下介绍这几种图像格式的内存排列方式。java

1、相关图像颜色空间介绍

1. RGB颜色空间

RGB颜色空间以Red、Green、Blue三种基本色为基础,进行不一样程度的叠加,产生丰富而普遍的颜色,因此俗称三基色模式。
常见的RGB格式有:RGB_56五、RGB_88八、ARGB_888八、ARGB_4444等。可是也有列外,尤为是搞安卓的同窗要特别注意,谷歌在这里给咱们挖了一个坑,那就是,ARGB_8888和ARGB_4444实际上在底层对应的是 RGBA_8888和RGBA_4444,例如ARGB_8888图像,其像素数据在内存中实际上是以R G B A R G B A …的顺序排布的。web

  • 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,
};

2. YUV颜色空间

在YUV颜色空间中,Y用来表示亮度,U和V用来表示色度。
常见的YUV格式有如下几大类:svg

  1. planar: Y、U、V所有连续存储,如I420、YV12,即3个plane
  2. packed: Y、U、V交叉存储,如YUYV,即1个plane
  3. semi-planar: Y连续存储,U、V交叉存储,如NV2一、NV12,即2个plane

2、相关图像格式介绍

1. BGR24图像格式

BGR24图像格式是一种采用24bpp(bit per pixel)的格式。每一个颜色通道B、G、R各占8bpp。
排列方式如:this

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 R

2. NV21图像格式

NV21图像格式属于 YUV颜色空间中的YUV420SP格式,每四个Y份量共用一组U份量和V份量,Y连续排序,U与V交叉排序。
排列方式如:spa

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 U

3. NV12图像格式

NV12图像格式属于 YUV颜色空间中的YUV420SP格式,每四个Y份量共用一组U份量和V份量,Y连续排序,U与V交叉排序(NV12和NV21只是U与V的位置相反)。
排列方式如:code

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 V

4. I420图像格式

I420图像格式属于 YUV颜色空间中的YUV420P格式,每四个Y份量共用一组U份量和V份量,Y、U、V各自连续排序。
排列方式如:orm

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     V

5. YV12图像格式

YV12图像格式属于 YUV颜色空间中的YUV420P格式,每四个Y份量共用一组U份量和V份量,Y、U、V各自连续排序(YV12和I420只是U与V的位置相反)。
排列方式如:xml

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     U

6. YUYV图像格式

YUYV图像格式属于 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