floating-point - 从 Julia 中的像素检索 RGB 矢量

标签 floating-point julia rgb pixel

我很难弄清楚如何在 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 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
你可以看到,在内部,实际上,一个像素包含一组 3 个无符号 8 位整数,名为 r , g , bi 中保持其值(value) field 。
然而,访问这些值的正确方法是通过 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
希望这一切都清除了。

关于floating-point - 从 Julia 中的像素检索 RGB 矢量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66246615/

相关文章:

c - 单精度 float 在零附近时的近似分辨率是多少

c++ - std::pow 不返回预期的 int 值

time - Julia :@time 一组函数

java - 将青色的整数颜色转换为 RGB 时遇到问题

image-processing - 比较两个组件及其颜色

c++ - 当存在 float 精度问题时,如何实际解决凸包?

c++ - 软件浮点和 x87 或 sse 禁用

performance - 在 Julia 中,是否有宏来确定是否可以在解析时评估表达式?

multithreading - Julia :@async和多个CPU内核/线程

javascript - 一个 Random(r, g ,b) 颜色生成器