如何将 ArrayFire 图像转换为 Julia 图像?

How do I convert ArrayFire Image to Julia Image?

我想将 Plots.jl 的绘图功能与使用 ArrayFire 的 load_image() 函数加载的图像一起使用。

我有的是:

AFArray: 1000×300×3 Array{Float32,3}

我想要的是:

300×1000 Array{RGB{Any},2} with eltype RGB

我无法在文档中找到直接转换。有什么有效的方法可以做到这一点吗?

我不太了解 ArrayFire 数组,但通常您可以使用 reinterpret 进行此类操作。如果你想让新的数组驻留在cpu上,那就把它复制过来。

然后,理想情况下,您可以这样做

rgb = reinterpret(RGB{Float32}, A)

不幸的是,MxNx3 不是 RGB 阵列的最佳布局,因为您希望按顺序放置 3 个值。所以你应该确保数组有 3xMxN 布局,或者你可以做 permutedims(A, (3, 1, 2)).

最后,要得到一个矩阵,你必须去掉前导单维,否则你会得到一个 1xMxN 的数组。

所以,

rgb = dropdims(reinterpret(RGB{Float32}, permutedims(A, (3, 1, 2))); dims=1)

我假设你真的想要 RGB{Float32} 而不是 RGB{Any}

顺便说一句,如果您想将最终数组保留在 GPU 上,我不确定这将如何工作。

编辑: 您可以考虑 reshape 而不是 dropdims,它在我的电脑上似乎稍微快一些。