如何使用 Julia 将 png 加载为数组?我有一个 256X256 图像,我想将其加载为 256X256 浮点数组。
我尝试使用图像
using Images
img = load("pic.png")
Run Code Online (Sandbox Code Playgroud)
然而,这只是加载和绘制图像,我无法提取像素值。
另外,我尝试过
img = read("pic.png")
Run Code Online (Sandbox Code Playgroud)
但这会将所有值加载到向量中。理论上,我可以重塑矢量以使其变为 256X256,但我希望有一些东西可以在我不必提前知道图像形状的情况下工作。
最后,如果我加载 PyPlot,我可以按照我想要的方式加载图像
import PyPlot as plt
img = plt.imread("pic.png")
Run Code Online (Sandbox Code Playgroud)
不过,我理想地希望能够在不调用 PyCall 的情况下加载图像。
推荐的方法是使用 FileIO。FileIO 将选择适当的解析器(可能是 ImageMagick,但对于 png,它将是 raher PNGFiles.jl)。这为您提供了一个用于访问图像的通用中央界面。
\n请注意, ImageMagick.jl GitHub 页面上也推荐使用此方法
\njulia> using FileIO\n\njulia> img = FileIO.load("c:\\\\temp\\\\fig.png")\n288\xc3\x97432 Array{RGBA{N0f8},2} with eltype ColorTypes.RGBA{FixedPointNumbers.N0f8}:\n RGBA{N0f8}(1.0,1.0,1.0,0.0) \xe2\x80\xa6 RGBA{N0f8}(1.0,1.0,1.0,0.0)\n RGBA{N0f8}(1.0,1.0,1.0,0.0) RGBA{N0f8}(1.0,1.0,1.0,0.0)\n \xe2\x8b\xae \xe2\x8b\xb1\n RGBA{N0f8}(1.0,1.0,1.0,0.0) \xe2\x80\xa6 RGBA{N0f8}(1.0,1.0,1.0,0.0)\n RGBA{N0f8}(1.0,1.0,1.0,0.0) RGBA{N0f8}(1.0,1.0,1.0,0.0)\nRun Code Online (Sandbox Code Playgroud)\n如果你希望这是一个 3 维的,Array你需要using Images尝试channelview:
julia> imgarr = channelview(img)\n4\xc3\x97288\xc3\x97432 reinterpret(reshape, N0f8, ::Array{RGBA{N0f8},2}) with eltype N0f8:\n[:, :, 1] =\n 1.0 1.0 1.0 1.0 1.0 1.0 \xe2\x80\xa6 1.0 1.0 1.0 1.0 1.0\n 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0\n...\nRun Code Online (Sandbox Code Playgroud)\n如果您想要不同的尺寸顺序,可以进一步结合permutedims(imgarr, [2,3,1])