假设我有以下矩阵:
img = [
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.5 1.0 1.0 1.0 1.0 1.0 1.0 0.5 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
]
我想将其转换为矩阵,其中每个元素将值表示为 RGB 通道。我想那里应该进行一些翻译。例如,用于表示的等效 RGB 通道是什么0.0
?你可能会说这不可能发生或不可能。但我可以将相同的矩阵转换为黑白图像:
julia> using Images
julia> Gray.(img)
这显示了一个图像作为输出。所以如果它能翻译0.0
变成黑色和1.0
通过灰色通道变成白色,然后我可以期望存在与 RGB 通道等效的值。
Q1:我的预期产出是多少?
Ans:像这样的矩阵(这里是任意数字):
10×12 Array{RGB{Float64},2} with eltype RGB{Float64}:
RGB{Float64}(0.412225,0.412225,0.412225) … RGB{Float64}(0.755344,0.755344,0.755344)
RGB{Float64}(0.0368978,0.0368978,0.0368978) RGB{Float64}(0.198098,0.198098,0.198098)
Q2:为什么我需要这个?
Ans:整个想法是能够改变某些像素的颜色。首先,我有一个矩阵Float64
元素类型。然后我想用以下方法实现等效矩阵RGB{Float64}
元素类型将其中一些值更改为其他值(以绿色或其他颜色显示像素。),然后查看图片以检查最终图像。
Q3:我试过什么?
Ans:我尝试了一种简单的方法,但失败了:
julia> RGB.(img)
julia> typeof(RGB.(img))
Matrix{RGB{N0f8}} (alias for Array{RGB{Normed{UInt8, 8}}, 2})
该命令渲染图像。它没有给我预期的矩阵。然后我尝试了这个:
julia> channelview(RGB.(img))
3×10×12 reinterpret(reshape, N0f8, ::Array{RGB{N0f8},2}) with eltype N0f8:
[:, :, 1] =
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
;;; …
[:, :, 12] =
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
但这不是我所期望的。
更新:
现在尝试另一种方法:
julia> convert(Array{RGB, 2}, img)
# Just renders the result and doesn't show the matrix
julia> typeof(convert(Array{RGB, 2}, img))
Matrix{RGB} (alias for Array{RGB, 2})
另外,我尝试过collect
ing它,但它导致了相同的结果。
附:我需要它在VScode,而不是 REPL。