读取YUV420p 10位文件并转换为RGB

时间:2018-12-01 12:44:49

标签: c++ opencv yuv

我想阅读YUV420p 10-bit帧并裁剪它们。我想将它们转换为RGB,然后再转换回YUV420p 10 bit。是否可以使用cv::cvtColor进行转换?

我可以使用以下代码针对8-bit YUV420p文件执行此操作

input_width = 1280;
input_height = 720;

errno_t err = fopen_s(&fp, filename.c_str(), "rb");
size_t frameSize = input_height * input_width * 3/2;

unsigned char* rawYUV;  //buffer to read from file
rawYUV = (unsigned char*)malloc(frameSize);

while (!isEOF)
{

    if (fread(rawYUV, sizeof(unsigned char), frameSize, fp)!= frameSize) 
    {
        isEOF = true;
    }

    // Conversion works only if I use this arguments.
    cv::Mat RawYUV(input_height*3/2, input_width, CV_8UC1, rawYUV);
    cv::imshow("YUV", RawYUV);  // displays monochrome in a bigger window

    cv::Mat RawRGB(input_height, input_width, CV_8UC3);
    cv::cvtColor(RawYUV, RawRGB, cv::COLOR_YUV420p2RGB);
    cv::imshow("RGB", RawRGB);    // displays correct frame
}

如果我使用诸如frameSize = input_width * input_height * 3之类的不同参数并使用CV_16UC1CV_16UC3而不是CV_8UC1CV_8UC3,则无法将其转换为RGB 。我在这里想念什么吗?输入文件为YUV420p 8-bitYUV420p 16-bit

在两种情况下(8位和10位)如何将RGB转换为YUV420p

0 个答案:

没有答案