Images
包中的recently asked how to convert Float32
or Uint8
arrays into images。我得到了Float32
案例的答案,但我仍然无法弄清楚如何保存Uint8
数组。
例如,让我们使用传统的Matlab方案创建一个随机Uint8
数组,其中维度为(m,n,3)
:
array = rand(Uint8, 50, 50, 3);
img = convert(Image, array);
使用与Float32
案例相同的方法
imwrite(img, "out.png")
失败并显示消息
错误:方法'mapinfo'没有匹配mapinfo的方法(:: Type {ImageMagick},:: Image {Uint8,3,Image {Uint8,3,Array {Uint8,3}}})。
我查看了文档and it says
如果数据沿着数组的某个维度编码颜色信息(与Color.jl包中使用ColorValue数组相反),请务必在属性中指定“colordim”和“colorspace”。
但是,检查先前创建的img
对象会显示已设置colordim = 3
和colorspace = RGB
,因此这不是问题所在。
然后我在文档中搜索了MapInfo
的所有实例。在core.md中有一次出现:
scalei:在显示时控制默认对比度缩放的属性。这应该是MapInfo值,用于在显示时设置对比度。如果没有此属性,将使用0到1的范围。
但是没有关于MapInfo
对象到底是什么的信息,所以我进一步观察,并在function_reference.md中说:
以下是如何直接构造主要的具体MapInfo类型:
MapNone(T),表示唯一的缩放形式是转换为类型T.这不是很安全,因为值“环绕”:例如,将258转换为Uint8会导致0x02,这看起来更暗比255 = 0xff。
...
和其他一些例子。所以我尝试按如下方式指定scalei = MapNone(Uint8)
:
img2 = Image(img, colordim = 3, colorspace = "RGB", scalei = MapNone(Uint8));
imwrite(img, "out.png")
但又遇到了同样的错误。
如何使用Julia中的Uint8
对Images
图像数据进行编码?
答案 0 :(得分:6)
最近更新了Images.jl包,请确保您拥有最新版本。
您的问题的答案是:
array = rand(Uint8, 50, 50, 3)
img = colorim(array)