我很难弄清楚如何在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
你可以看到,在内部,事实上,一个像素保存了一组3个无符号的8位整数,命名为r
,g
,b
,它们的值保存在i
字段中。
访问这些值的正确方法是通过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
希望这能澄清一切。