RGBtoXYZ转换错误

问题描述 投票:-4回答:1

我在将RGB转换为XYZ时遇到麻烦。

据此http://easyrgb.com/index.php?X=MATH&H=02#text2公式是:

var_R = ( R/255 )
var_G = ( G/255 )
var_B = ( B/255 )

if ( var_R > 0.04045 ) var_R = ( ( var_R + 0.055 ) / 1.055 ) ^ 2.4
else var_R = var_R / 12.92
if ( var_G > 0.04045 ) var_G = ( ( var_G + 0.055 ) / 1.055 ) ^ 2.4
else var_G = var_G / 12.92
if ( var_B > 0.04045 ) var_B = ( ( var_B + 0.055 ) / 1.055 ) ^ 2.4
else var_B = var_B / 12.92

var_R = var_R * 100
var_G = var_G * 100
var_B = var_B * 100

X = var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805
Y = var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722
Z = var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505

问题是,如果我使用Red = 7,Green = 7,Blue = 80,则这些值是错误的。来自同一站点的XYZ将其计算为

X = 1.612
Y = 0.776
z = 7.654

但是,使用描述的相同公式,我发现的结果是:

X = 0,60174915012
Y = 0,3723904480
z = 2,3369759394

上面的值与我使用excel进行计算的值相同。所以,我不明白我在做什么错。如果我使用从站点提供的公式,则值是上面的值,但是从站点计算得出的结果是不同的?

如何正确计算RGBtoXYZ的值,使其与计算器的值相同? (当然,假设他们的计算器给出了正确的值)

注:Stackoverflow表示这是有关战俘的重复问题。但这与战俘无关,但上面的公式有误]

c math rgb
1个回答
2
投票

在C和C ++中,^是按位XOR。您可能打算使用pow()

pow()
© www.soinside.com 2019 - 2024. All rights reserved.