如何在Julia中将Float64矩阵转换为RGB通道矩阵?
将灰度矩阵转换为RGB{Float64}矩阵的问题
我有如下Float64类型的灰度矩阵:
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通道值的矩阵。比如用Gray.(img)可以将0.0转为黑色、1.0转为白色,因此我认为存在对应的RGB通道转换方式。
Q1:预期输出是什么?
答:得到如下类型的矩阵(示例数值仅作参考):
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:为什么需要这个转换?
答:我需要修改部分像素的颜色。先将Float64类型矩阵转为RGB{Float64}类型矩阵,之后修改部分元素的颜色(例如设为绿色),再查看最终图像。
Q3:我已尝试的方法?
答:我尝试了直接转换,但未得到预期结果:
julia> using Images 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) # 仅渲染结果,不显示矩阵 julia> typeof(convert(Array{RGB, 2}, img)) Matrix{RGB} (alias for Array{RGB, 2})
用collect尝试,结果也是一样。
备注:我需要在VSCode中实现该功能,而非REPL。
内容的提问来源于stack exchange,提问作者Shayan
相关产品推荐
相关产品推荐

