将 RGBA{U8}(0.384,0.0,0.0,1.0) 转换为整数

Convert RGBA{U8}(0.384,0.0,0.0,1.0) to Integer

我在 Julia 中使用 Images.jl。我正在尝试将图像转换为类似图形的数据结构 (v,w,c),其中

我想给那些没有相同颜色的邻居一个昂贵的成本。但是,当我加载图像时,每个像素都具有以下类型 RGBA{U8}(1.0,1.0,1.0,1.0),是否有任何方法可以将其转换为 Int64 或 Float 等数字?

根据@daycaster 的建议,可以使用 Colors.jl 中的 colordiff

colordiff 将两种颜色作为参数。要使用它,您应该使用 color 提取像素的颜色部分,即 colordiff(color(v),color(w)),其中 v 将是 RGBA{U8(0.384,0.0,0.0,1.0) 值。

如果你只想惩罚具有不同颜色值的相邻对(无论差异有多小),我认为 img[i,j] != img[i+1,j] 应该足够了,而且比调用 [=11= 更高效].

Images.jl 还包含方法 rawseparate,它们允许您将图像 "convert" 转换为 UInt8 的高维数组。但是,对于您明显的应用程序,这可能会更痛苦,因为您必须在使用像 A[:, i, j] != A[:, i+1, j] 这样的语法(这将分配内存并且性能更差)或写出循环并检查每个循环之间做出选择手动颜色通道。然后总是有一点烦恼,必须对灰度和颜色的代码进行特殊处理,想知道 3d 数组的真正含义(它是 3d 灰度还是带颜色通道的 2d?),并想知道颜色通道是否存储为第一个或最后一个维度。

None 如果您直接使用 RGBA 格式的数据,就会出现这些烦恼。关于更多背景知识,它们是 Julia 的 "immutable" 对象的示例,它们至少有两个优点。首先,它们允许您清楚地指定特定数字集合的 "meaning"(在这种情况下,这 4 个数字代表特定颜色空间中的一种颜色,而不是来自传感器的压力读数)- --这意味着您可以编写不被迫做出无法强制执行的假设的代码。其次,一旦您学会了如何使用它们,它们就会使您的代码更漂亮,同时提供出色的性能。

颜色类型已记录 here

如果你想要的只是幅度差异,我可能会建议将每个像素转换为灰度。

有关操作方法,请参阅此答案:

Converting RGB to grayscale/intensity

这将为您提供一个单一的强度值,然后您可以使用该值进行比较。