如何使用Images.jl在julia中将一个浮点数组写为Image

时间:2016-12-21 11:28:45

标签: julia

我需要读取图像,稍微操作一下,然后再将其保存为图像。为此,我在julia中找到了优秀的Images.jl包。我能够读取图像,将其转换为浮点数组,然后对其进行操作(裁剪图像并更改图像上的某些值)。但是,我找不到将其存储为jpg的方法。再次归档。这是我申请操纵数据的过程。对于下面的代码,我们假设我在同一目录中有一个 dog.jpg 文件。

Using Images,Colors
averageImage = zeros(1,1,3)
averageImage[1,1,:] = [123.68 116.779 103.779]
function data(img, averageImage)
           a0 = load(img)
           new_size = ntuple(i->div(size(a0,i)*224,minimum(size(a0))),2)
           a1 = Images.imresize(a0, new_size)
           i1 = div(size(a1,1)-224,2)
           j1 = div(size(a1,2)-224,2)
           b1 = a1[i1+1:i1+224,j1+1:j1+224]
           c1 = separate(b1)
           d1 = convert(Array{Float32}, c1)
           e1 = reshape(d1[:,:,1:3], (224,224,3,1))
           f1 = (255 * e1 .- averageImage)
           g1 = permutedims(f1, [2,1,3,4])
           g1 = g1[:,:,:]
           # here type of g1 is : Array{Float64,3}
       end

A = data("dog.jpg",averageImage)

在这里,我能够得到A.现在,我需要将A数组保存为图像。 为此,我尝试以下方法:

save("modified_dog.jpg",A) 

我收到以下错误:

  

错误:ArgumentError:FixedPointNumbers.UFixed {UInt8,8}是一个8位   表示从0.0到1.0的256个值的类型;不能代表-79.68

不幸的是,我不知道要做那种转换。

有没有人帮我保存上面提到的A阵列?提前致谢。

2 个答案:

答案 0 :(得分:1)

我没有看过你的大部分功能,但最后你可以试试:

result = convert(Image, map(ScaleMinMax(Float64, 0.0, 256.0), g1))
save("/tmp/test.png", result)

可能会转换它。

documentation有一个神秘的部分,名为MapInfo(不是GIS系统),它为这个主题带来了闪烁的光芒......

答案 1 :(得分:0)

NRRD格式是浮点图像的合理选择,但要注意它在外部2D图形程序中没有广泛的支持(它更广泛地用于3d图像)。如果你只使用像"test.nrrd"这样的文件名,它应该可以正常工作。