使用Julia中的Images将Uint8数组导出为图像

时间:2014-09-08 00:05:36

标签: image julia

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 = 3colorspace = 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中的Uint8Images图像数据进行编码?

1 个答案:

答案 0 :(得分:6)

最近更新了Images.jl包,请确保您拥有最新版本。

您的问题的答案是:

array = rand(Uint8, 50, 50, 3)
img = colorim(array)