我有一个缓冲区,其中包含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)
高度乘以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)
更正:在最新版本的OpenCV(我使用最旧的2.4.13版本)中,颜色转换代码更改为COLOR_YUV2BGR_YV12
cv::cvtColor(picYV12, picBGR, COLOR_YUV2BGR_YV12);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9911 次 |
最近记录: |