1. 程式人生 > >YUV(NV21)影象資料到RGB顏色空間的轉換

YUV(NV21)影象資料到RGB顏色空間的轉換


本文主要介紹YUV_NV21顏色空間到RGB(BGR in OpenCV)顏色空間的轉換,並給出示例程式碼,另附YUV影象檢視工具。

NV21(YUV420)介紹

NV12和NV21屬於YUV420格式(每2x2四個Y,共用一組uv),是一種two-plane模式,即Y和UV分為兩個Plane,但是UV(CbCr)為交錯儲存,而不是分為三個plane。先儲存所有的Y,然後UV交錯儲存:NV12先U後V,NV21先V後U。

YUV420sp示例格式如下:
在這裡插入圖片描述

YUV_NV21轉BGR程式碼

YUV_NV21顏色空間到RGB(BGR in OpenCV)顏色空間的轉換示例程式碼如下:

const int width  = 1280;
const int height = 800;

std::ifstream file_in;
file_in.open("../image_yuv_nv21_1280_800_01.raw", std::ios::binary);
std::filebuf *p_filebuf = file_in.rdbuf();
size_t size = p_filebuf->pubseekoff(0, std::ios::end, std::ios::in);
p_filebuf->pubseekpos(0, std::ios::in);

char *buf_src = new char[size];
p_filebuf->sgetn(buf_src, size);

cv::Mat mat_src = cv::Mat(height*1.5, width, CV_8UC1, buf_src);
cv::Mat mat_dst = cv::Mat(height, width, CV_8UC3);

cv::cvtColor(mat_src, mat_dst, cv::COLOR_YUV2BGR_NV21);

轉換效果如下:
在這裡插入圖片描述

YUV影象 檢視工具