yuv420p到rgb图像转换

时间:2012-07-03 08:04:43

标签: c image visual-studio-2008 image-processing opengl-es-2.0

第一部分是打开文件并将其加载到yuv1缓冲区。 下一步是正确读取YUV420p数据 我使用wiki的这个公式

  size.total = size.width * size.height;
      y = yuv[position.y * size.width + position.x];
      u = yuv[(position.y / 2) * (size.width / 2) + (position.x / 2) + size.total];
      v = yuv[(position.y / 2) * (size.width / 2) + (position.x / 2) + size.total + (size.total / 4)];

下一阶段是从y u v获取值并使用下面的公式转换为rgb

B = 1.164(Y - 16)+ 2.018(U - 128)

G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)

R = 1.164(Y-16)+ 1.596(V-128)

获取RGB后,我们将它们正确加载回缓冲区并关闭文件。

但是我得到了这个错误错误C2064:term不会评估为一个带有302个参数的函数 在三个公式中。

有人可以帮助我吗

错误代码

        r1 = 1.164(y1 - 16) + 1.596(v1 - 128) +     0;
        g1 = 1.164(y1 - 16) - 0.813(v1 - 128) - 0.391(u1 - 128);
        b1 = 1.164(y1 - 16)+          0         + 2.018(u1 - 128);

1 个答案:

答案 0 :(得分:1)

您是否只是将数学公式粘贴到C代码中?那不行。

您需要修复变量的大写/小写。你需要一个明确的乘法符号:

b = 1.164 * (y - 16) + 2.018 * (u - 128);
g = 1.164 * (y - 16) - 0.813 * (v - 128) - 0.391 * (u - 128);
r = 1.164 * (y - 16) + 1.596 * (v - 128);

根据b,g和r变量的类型,您需要将浮点结果转换或舍入为整数值。