2016-12-21 72 views
1

我需要讀取圖像,稍微操作它,然後再次將其保存爲圖像。爲此,我在茱莉亞找到了優秀的Images.jl包。我能夠讀取圖像,將其轉換爲浮點數組,然後對其進行處理(裁剪圖像並更改圖像上的某些值)。但是,我無法找到將其存儲爲jpg的方式。再次文件。以下是我應用於操作數據的過程。對於下面的代碼,我們假設我在同一個目錄中有一個dog.jpg文件。如何使用Images.jl將圖像寫入浮動數組中作爲圖像

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.現在,我需要將該數組保存爲圖像。 要到這一點,我嘗試以下方法:

save("modified_dog.jpg",A) 

我得到了以下錯誤:

ERROR: ArgumentError: FixedPointNumbers.UFixed{UInt8,8} is an 8-bit type representing 256 values from 0.0 to 1.0; cannot represent -79.68

可惜的是,我不知道這樣做轉換。

有沒有人可以幫我保存提到的數組?提前致謝。

+0

由於錯誤指示,圖像將在[0,1]中獲取浮點值,而不是範圍[0,255]中的值。如果您爲此調整代碼,它應該可以工作。 – StefanKarpinski

回答

1

我沒有看過你的大部分功能,但最後你可以嘗試:

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

可能轉換。

documentation有資格的MapInfo(不是GIS系統),一個神祕的部分,其揭示了這一問題的閃爍的燈光......

0

的NRRD格式是浮點圖像合理的選擇,但要知道,它沒有廣泛支持外部2D圖形程序(它更廣泛地用於3D圖像)。如果你只是使用一個文件名,如"test.nrrd"它應該只是工作。