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



我想将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,它在我的电脑上似乎稍微快一点。

相关内容

  • 没有找到相关文章

最新更新