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

如何将ArrayFire图像转换为Julia图像?,julia,arrayfire,plots.jl,Julia,Arrayfire,Plots.jl,我想使用Plots.jl的plotting功能,并使用ArrayFire的load\u image()功能加载图像 我得到的是: AFArray: 1000×300×3 Array{Float32,3} 我想要的是: 300×1000 Array{RGB{Any},2} with eltype RGB 我无法在文档中找到直接转换。有什么有效的方法可以做到这一点吗?我不知道ArrayFire阵列的具体情况,但一般来说,对于这样的操作,您可以使用重新解释。如果希望新阵列驻留在cpu上,请将其复制

我想使用Plots.jl的plotting功能,并使用ArrayFire的
load\u image()
功能加载图像

我得到的是:

AFArray: 1000×300×3 Array{Float32,3}
我想要的是:

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

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

我不知道ArrayFire阵列的具体情况,但一般来说,对于这样的操作,您可以使用
重新解释。如果希望新阵列驻留在cpu上,请将其复制过来

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

rgb = reinterpret(RGB{Float32}, A)
不幸的是,MxNx3不是RGB阵列的最佳布局,因为您希望按顺序定位3个值。因此,您应该确保阵列具有3xMxN布局,或者您可以执行
置换ims(A,(3,1,2))

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

所以

我假设您实际上想要
RGB{Float32}
而不是
RGB{Any}

顺便说一句,如果你想在GPU上保留最终阵列,我不确定这将如何工作


<> >编辑:<>强> >你可以考虑<代码>改写,而不是<代码> DROPdiMS <代码>,在我的PC上看起来稍微快一点。

谢谢你的回答,先生,但是在我的GPU上花费了几乎一分钟的时间,它的容量只有100KB JPG的40%,在我的程序中最关键的部分是速度。此外,RGB通道不必要地缩放到255,我在屏幕上看到的都是白色。我想说,我使用绘图的主要原因是利用它的标签和轴,通过将文件直接读入GPU,我的代码速度提高了3倍,我应该继续尝试重新解释功能,还是有更好的方法在带有记号和标签的图像上绘制轴?在我的计算机上,(3,1,2));dims=1)
需要是的,我认为cpu和gpu之间的通信需要时间。我不是Images.jl方面的专家,但我不知道你是否可以在gpu上使用
RGB
数组。在这种情况下,如果你真的想要
数组{RGB,2}
,您最好还是放弃gpu,因为数据最终会回到cpu上。也许有一些方法可以完全在gpu上完成这项工作,但我不知道如何完成。顺便说一句,这种类型的问题很适合继续问(在这种情况下,请记住包含指向此问题的链接)。您可以使用
阵列(afa)将数据传输回cpu
其中
afa
是您的
AFArray
。请参阅自述:
rgb = dropdims(reinterpret(RGB{Float32}, permutedims(A, (3, 1, 2))); dims=1)