圖像實戰 - RGB、YUV圖像格式介紹

最近在做人臉識別的項目,所以接觸到也採坑了不少關於圖像方面的技術,比如RGB、YUV圖像格式,今天就主要記錄一下常用的幾種圖像格式:BGR24、NV21、NV12、I420、YUYV…。以下介紹這幾種圖像格式的內存排列方式。

一、相關圖像顏色空間介紹

1. RGB顏色空間

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

2. YUV顏色空間

在YUV顏色空間中,Y用來表示亮度,U和V用來表示色度。
常見的YUV格式有以下幾大類:

  1. planar: Y、U、V全部連續存儲,如I420、YV12,即3個plane
  2. packed: Y、U、V交叉存儲,如YUYV,即1個plane
  3. semi-planar: Y連續存儲,U、V交叉存儲,如NV21、NV12,即2個plane

二、相關圖像格式介紹

1. BGR24圖像格式

BGR24圖像格式是一種採用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 R

2. NV21圖像格式

NV21圖像格式屬於 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 U

3. NV12圖像格式

NV12圖像格式屬於 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 V

4. I420圖像格式

I420圖像格式屬於 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     V

5. YV12圖像格式

YV12圖像格式屬於 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     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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章