c - yuv420p 到 rgb 图像转换

标签 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 后,我们将它们加载回正确的缓冲区并关闭文件。

但我收到此错误 error C2064: term does not evaluate to a function taking 302 arguments 在三个公式行中。

谁能帮帮我

错误代码

        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);

最佳答案

您是否只是将数学公式粘贴到您的 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 变量的类型,您需要将浮点结果转换或舍入为整数值。

关于c - yuv420p 到 rgb 图像转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11306802/

相关文章:

c# - 将多个内阁文件捆绑在一起? (适用于 Windows 移动设备)

c++ - C 和 C++ 中的这个结构是什么

c - 读取系统调用从 STDIN 读取数据

css - 使用 CSS 在导航栏中悬停时更改 SVG 图像

image - 如何显示 p :selectManyCheckbox 中带有图像的项目

php - 如何在 Mysql 中更新图像

调用 fdopen : Bad file descriptor

java - 用Java编译和运行C程序

c++ - 组织项目依赖

c++ - VS C++ 程序仅在从文件夹运行 .exe 时才有效? [不是VS调试]