我有一个缓冲区,其中包含 YV12 格式的图像。现在我想将此缓冲区转换为 RGB 格式或直接从中创建一个 Mat 对象!有人能帮我吗?我试过这段代码:
cv::Mat input(widthOfImg, heightOfImg, CV_8UC1, vy12Buffer);
cv::Mat converted;
cv::cvtColor(input, converted, CV_YUV2RGB_YV12);
最佳答案
这是可能的。
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
高度乘以 3/2,因为有 4 个 Y 样本,每 2x2 平方像素存储 1 U 和 1 V 样本。这导致字节样本与像素的比率为 3/2
4*1+1+1 samples per 2*2 pixels = 6/4 = 3/2
更正:在最新版本的 OpenCV(我使用最旧的 2.4.13 版本)中,颜色转换代码更改为 COLOR_YUV2BGR_YV12
cv::cvtColor(picYV12, picBGR, COLOR_YUV2BGR_YV12);
关于opencv - 从 YV12 图像缓冲区创建 Mat 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18737842/