从YV12图像缓冲区创建Mat对象

s4e*_*eed 7 opencv yuv

我有一个缓冲区,其中包含YV12格式的图像.现在我要将此缓冲区转换为RGB格式或直接从中创建Mat对象!有人能帮我吗?我试过这段代码:

cv::Mat input(widthOfImg, heightOfImg, CV_8UC1, vy12Buffer);
cv::Mat converted;
cv::cvtColor(input, converted, CV_YUV2RGB_YV12);
Run Code Online (Sandbox Code Playgroud)

JaR*_*aRo 14

那是可能的.

    cv::Mat picYV12 = cv::Mat(nHeight * 3/2, nWidth, CV_8UC1, yv12DataBuffer);
    cv::Mat picBGR;
    cv::cvtColor(picYV12, picBGR, CV_YUV2BGR_YV12);
    cv::imwrite("test.bmp", picBGR);  //only for test
Run Code Online (Sandbox Code Playgroud)

Opencv颜色转换标志

高度乘以3/2,因为有4个Y样本,每2x2平方像素存储1 U和1 V样本.这导致字节样本与像素的比率为3/2

4*1+1+1 samples per 2*2 pixels = 6/4 = 3/2
Run Code Online (Sandbox Code Playgroud)

YV12格式

更正:在最新版本的OpenCV(我使用最旧的2.4.13版本)中,颜色转换代码更改为COLOR_YUV2BGR_YV12

    cv::cvtColor(picYV12, picBGR, COLOR_YUV2BGR_YV12);
Run Code Online (Sandbox Code Playgroud)