我正在努力想出如何在Julia中检索像素的RGB向量组件。例如,如果我有一张名为image
的图像,并选择一个像素,比如image[230,1566]
,那么如果我想要RGB矢量的绿色分量,我的倾向是仅仅执行RGB(image[230,1566]).g
。然而,这样的结果会返回一个类似于0.778N0f8
的字符串。我知道这意味着“使用8个小数位进行归一化”,但这不是我想要的。我只想得到实际的浮点数作为数字,以便可以对其执行其他操作。你有任何想法如何解决这个问题吗?提前感谢!
我正在努力想出如何在Julia中检索像素的RGB向量组件。例如,如果我有一张名为image
的图像,并选择一个像素,比如image[230,1566]
,那么如果我想要RGB矢量的绿色分量,我的倾向是仅仅执行RGB(image[230,1566]).g
。然而,这样的结果会返回一个类似于0.778N0f8
的字符串。我知道这意味着“使用8个小数位进行归一化”,但这不是我想要的。我只想得到实际的浮点数作为数字,以便可以对其执行其他操作。你有任何想法如何解决这个问题吗?提前感谢!
julia> using Colors
julia> pixel = colorant"purple"
RGB{N0f8}(0.502,0.0,0.502)
RGB
类型使用 N0f8
类型来存储其值。让我们来看一下内部情况。julia> dump(pixel)
RGB{FixedPointNumbers.N0f8}
r: FixedPointNumbers.N0f8
i: UInt8 0x80
g: FixedPointNumbers.N0f8
i: UInt8 0x00
b: FixedPointNumbers.N0f8
i: UInt8 0x80
您可以看到,在内部,实际上,一个像素包含一组称为 r
, g
, b
的三个无符号8位整数,它们在字段中保持其值。
但是,访问这些值的正确方式是通过red
、green
、blue
方法而不是字段:
julia> dump(red(pixel))
FixedPointNumbers.N0f8
i: UInt8 0x80
如果你想得到浮点数值,可以使用 float(red(pixel)))
:
julia> dump(float(red(pixel)))
Float32 0.5019608f0
需要注意的是,现在返回的值比原始数据大4倍(32位而不是8位)。
如果您希望获取原始数据(即8位数据),可以执行以下操作:
julia> reinterpret(red(pixel))
0x80
red
...”:Julia的颜色生态系统还支持常见的颜色编码方案,如ARGB32
,它将颜色打包到UInt32
的特定位中。在这种情况下,没有c.r
字段可供访问,但是red(c)
仍然会返回红色通道的值。无论表示如何,访问器方法始终是安全的。 - tholy
0.778N0f8
不是一个字符串,而是一个实际的数字,您可以对其进行计算操作。例如,尝试执行0.778N0f8 + 1
。如果您遇到任何操作问题,可以使用float(0.778N0f8)
或任何转换方式,如Float16
等。 - DNF