为什么图像存储与不显示的图像不同?

问题描述:

我目前无法理解为什么我不能够重新情节我存储数据后..为什么图像存储与不显示的图像不同?

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

没有错,一切似乎按预期工作,据我所知,没有数据或知道阵列形状。

不过,如果你希望你的imshow情节类似于由librosa产生的一个,你可能首先考虑使用一种不平等方面

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

,并可能设置的情节数据范围正确使用imshow的参数extent

另外要注意,通过librosa产生的情节是pcolormesh,所以要忠实地复制它,你可能要保持你的数据在它(不把它通过颜色表)的格式和使用pcolormesh来绘制。

+0

数组形状交织的是(x,40)。当它被cmap转换时它是(40,x,4) - 这也是我所期望的。但情节看起来如此不同。当'cmap'应该创建一个带有RGB值的数据数组时,为什么我需要'pcolormesh'。数据必须包含图像的RGB值,因为稍后我将它们存储以供进一步处理。 –

+0

你知道电网出现的原因吗? –