2017-04-27 170 views
0

我目前無法理解爲什麼我不能夠重新情節我存儲數據後..爲什麼圖像存儲與不顯示的圖像不同?

import os 
import sys 
from os import listdir 
from os.path import isfile, join 
import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 
import seaborn as sb 
from matplotlib.colors import Normalize 
import matplotlib 
from matplotlib import cm 
from PIL import Image 
import librosa 
import librosa.display 
import ast 

def make_plot_store_data(name,interweaved): 
    librosa.display.specshow(interweaved.T,sr=16000,x_axis='frames',y_axis='mel',hop_length=160,cmap=cm.jet) 
    plt.title("log mel power spectrum of interweaved " + name) 
    plt.colorbar(format='%+02.0f dB') 
    plt.savefig(plot+"/"+name+"_plot_interweaved_conv.png") 
    plt.show() 
    plt.close() 


    convert = plt.get_cmap(cm.jet) 
    numpy_output_interweawed = convert(interweaved.T) 
    print interweaved.shape 
    print numpy_output_interweawed.shape 
    plt.imshow(numpy_output_interweawed, interpolation='nearest') 
    plt.show() 
    raw_input("Somethign") 
    numpy_output_interweawed.dump(numpy_train+name+"_normalized_interweaved"+".dat") 
    numpy_output_interweawed_or = convert(interweaved.T)*255 
    numpy_output_interweawed_or.dump(numpy_train+name+"_interweaved"+".dat") 

情節表明通過librosa視圖中的數據作爲

enter image description here

但是,當我轉換原始數據使用plt.cmap(cm.jet) 和它使用matplotlib.pyplot圖的東西弄亂了數據,並且看起來不像原始的任何方式..

enter image description here

編輯

這是

plt.imshow(interweaved.T,aspect = 'auto') 
plt.show() 
raw_input("Somethign") 

enter image description here

它看起來像的圖像事情長寬比 - 它開始像原來的情節,當我使情節更大 - 但爲什麼顏色太暗...

enter image description here

+0

與此相同的問題:http://stackoverflow.com/questions/43647366/store-a-numpy-ndarray-as-an-image-and-then-save-the-pixel-values – ImportanceOfBeingErnest

回答

0

沒有錯,一切似乎按預期工作,據我所知,沒有數據或知道陣列形狀。

不過,如果你希望你的imshow情節類似於由librosa產生的一個,你可能首先考慮使用一種不平等方面

plt.imshow(..., aspect="auto") 

,並可能設置的情節數據範圍正確使用imshow的參數extent

另外要注意,通過librosa產生的情節是pcolormesh,所以要忠實地複製它,你可能要保持你的數據在它(不把它通過顏色表)的格式和使用pcolormesh來繪製。

+0

數組形狀交織的是(x,40)。當它被cmap轉換時它是(40,x,4) - 這也是我所期望的。但情節看起來如此不同。當'cmap'應該創建一個帶有RGB值的數據數組時,爲什麼我需要'pcolormesh'。數據必須包含圖像的RGB值,因爲稍後我將它們存儲以供進一步處理。 –

+0

你知道電網出現的原因嗎? –