在Julia中从像素中检索RGB矢量



我很难弄清楚如何在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

希望这能澄清一切。

最新更新