最近在做人臉識別的項目,所以接觸到也採坑了不少關於圖像方面的技術,比如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格式有以下幾大類:
- planar: Y、U、V全部連續存儲,如I420、YV12,即3個plane
- packed: Y、U、V交叉存儲,如YUYV,即1個plane
- 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