我需要读取图像,稍微操作一下,然后再将其保存为图像。为此,我在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阵列?提前致谢。
答案 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"
这样的文件名,它应该可以正常工作。