我想阅读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_16UC1
和CV_16UC3
而不是CV_8UC1
和CV_8UC3
,则无法将其转换为RGB 。我在这里想念什么吗?输入文件为YUV420p 8-bit
和YUV420p 16-bit
在两种情况下(8位和10位)如何将RGB
转换为YUV420p
?