首页 文章

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

提问于
浏览
5

我在 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 ,:: 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中使用 Images 编码 Uint8 图像数据?

1 回答

  • 6

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

    你的问题的答案是:

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

相关问题