Floating point 从Julia中的像素检索RGB向量

Floating point 从Julia中的像素检索RGB向量,floating-point,julia,rgb,pixel,Floating Point,Julia,Rgb,Pixel,我很难弄清楚如何在Julia中检索像素的RGB向量的分量。例如,如果我有一个图像,我称之为image,我选择一个像素,比如说image[2301566],那么如果我想要,比如说,RGB向量的绿色分量,我倾向于只做RGB(图像[2301566]).g。但是,这样的东西将返回一个字符串,如0.778N0f8。我知道这意味着“用8个分数位标准化”,但这不是我想要的。我只是希望实际的浮点数是一个数字,这样我就可以对它执行其他操作。你知道我该怎么做吗?提前谢谢

我很难弄清楚如何在Julia中检索像素的RGB向量的分量。例如,如果我有一个图像,我称之为
image
,我选择一个像素,比如说
image[2301566]
,那么如果我想要,比如说,RGB向量的绿色分量,我倾向于只做
RGB(图像[2301566]).g
。但是,这样的东西将返回一个字符串,如
0.778N0f8
。我知道这意味着“用8个分数位标准化”,但这不是我想要的。我只是希望实际的浮点数是一个数字,这样我就可以对它执行其他操作。你知道我该怎么做吗?提前谢谢
julia> using Colors

julia> pixel = colorant"purple"
RGB{N0f8}(0.502,0.0,0.502)
我们可以看到,
RGB
类型默认使用type
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位整数,它们的值保存在
i
字段中

但是,访问这些值的正确方法是通过
红色
绿色
蓝色
方法,而不是字段:

julia> dump(red(pixel))
FixedPointNumbers.N0f8
  i: UInt8 0x80
如果要获取浮点值,可以执行以下操作:
float(红色(像素))

但是请注意,现在返回的值比原始数据大4倍(32位而不是8位)

如果您希望获得原始数据(8位),可以执行以下操作:

julia> reinterpret(red(pixel))
0x80

希望这一切都能解决。

0.778N0f8
不是字符串,而是您可以操作的实际数字。例如,尝试
0.778N0f8+1
。如果有任何操作遇到问题,您可以执行
float(0.778N0f8)
或使用任何转换,如
Float16
或其他任何操作。感谢您的全面响应。非常感谢!这是一个出色的答案。为了进一步说明为什么“访问这些值的正确方法是通过
red
,…”:Julia的颜色生态系统还支持常见的颜色编码方案,如
ARGB32
,它将颜色打包到
UInt32
的特定位中。在这种情况下,没有可访问的
c.r
字段,但
red(c)
仍将返回红色通道的值。无论采用何种表示形式,访问器方法始终是安全的。
julia> reinterpret(red(pixel))
0x80