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

如何使用Images.jl在julia中编写一个浮点数组作为Image,julia,Julia,我需要读取一个图像,对其进行一些操作,然后再次将其保存为图像。为此,我在julia中找到了出色的Images.jl包。我能够读取图像,将其转换为浮点数组,然后对其进行操作(裁剪图像并更改图像上的一些值)。但是,我找不到将其存储为jpg的方法。再次归档。下面是我用来处理数据的过程。对于下面的代码,假设我在同一目录中有一个dog.jpg文件 Using Images,Colors averageImage = zeros(1,1,3) averageImage[1,1,:] = [123.68 11

我需要读取一个图像,对其进行一些操作,然后再次将其保存为图像。为此,我在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)
在这里,我可以得到一个。现在,我需要将该数组保存为图像。 为此,我尝试以下方法:

save("modified_dog.jpg",A) 
我得到了以下错误:

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

不幸的是,我不知道如何进行这种转换


有人帮我保存提到的数组吗?提前谢谢

我还没有看过您的大部分函数,但最后您可以尝试:

result = convert(Image, map(ScaleMinMax(Float64, 0.0, 256.0), g1))
save("/tmp/test.png", result)
这可能会改变它


该网站有一个名为MapInfo(而非GIS系统)的神秘部分,该部分对该主题闪烁着光芒

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

如错误所示,图像采用的是[0,1]中的浮点值,而不是[0255]范围内的值。如果您将代码调整到这种效果,它应该可以工作。