我在 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 = 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中使用 Images
编码 Uint8
图像数据?
1 回答
最近更新了Images.jl包,确保您拥有最新版本 .
你的问题的答案是: