第一部分是打开文件并将其加载到 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/