微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何将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,2))); dims=1)

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

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

编辑:您可能考虑使用reshape而不是dropdims,这在我的电脑上似乎更快。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。