2017-04-27 8 views
0

私は現在、画像としてnumpy.ndarrayを保存し、そのイメージを保存してイメージのピクセル値をnumpy.ndarray。ピクセル値を伴うnumpy.ndarrayの次元は、プロットを作成するために使用されたnumpy.ndarrayと同じでなければなりません。numpy.ndarrayをイメージとして保存し、ピクセル値を保存します。

私はこのような何かを試してみました:

def make_plot_store_data(name, data): 
    plt.figure() 
    librosa.display.specshow(data.T,sr=16000,x_axis='frames',y_axis='mel',hop_length=160,cmap=cm.jet) 
    plt.savefig(name+".png") 
    plt.close() 

    convert = plt.get_cmap(cm.jet) 
    numpy_output_interweawed = convert(data.T) 

最初の画像は、次のようになります。

enter image description here

なぜこれがそう台無しにされています? enter image description here 第二の画像は、このようになりますか。

+0

[最小、完全、および検証可能な例](https://stackoverflow.com/help/mcve)を入力すると、助けが簡単になります。また、なぜあなたの 'ndarray'がイメージとしてレンダリングされただけなので、形が変わるのかは明らかではありません。実際の例は私の答えを見てください。 –

+0

また、 'convert()'はスカラーをRGBAにマップします。この配列は '[N x N]'の入力配列で '[N、N、4]'行列を返します。詳細は、['Colormap' docs](http://matplotlib.org/api/colors_api.html#matplotlib.colors.Colormap)を参照してください。 –

+1

この質問と同じ質問:http://stackoverflow.com/questions/43646838/why-is-image-stored-different-than-the-one-imshowed – ImportanceOfBeingErnest

答えて

0

512x512 ndarrayをイメージとして表示し、イメージオブジェクトとして保存し、イメージファイルを保存し、元のイメージと同じ形の正規化されたピクセル配列を生成する方法があります。

import numpy as np 

# sample numpy array of an image 
from skimage import data 
camera = data.camera() 
print(camera.shape) # (512, 512) 

# array sample 
print(camera[0:5, 0:5]) 

[[156 157 160 159 158] 
[156 157 159 158 158] 
[158 157 156 156 157] 
[160 157 154 154 156] 
[158 157 156 156 157]] 

# display numpy array as image, save as object 
img = plt.imshow(camera) 

camera

# save image to file 
plt.savefig('camera.png') 

# normalize img object pixel values between 0 and 1 
normed_pixels = img.norm(camera) 

# normed_pixels array has same shape as original 
print(normed_pixels.shape) # (512, 512) 

# sample data from normed_pixels numpy array 
print(normed_pixels[0:5,0:5]) 

[[ 0.61176473 0.6156863 0.627451 0.62352943 0.61960787] 
[ 0.61176473 0.6156863 0.62352943 0.61960787 0.61960787] 
[ 0.61960787 0.6156863 0.61176473 0.61176473 0.6156863 ] 
[ 0.627451 0.6156863 0.60392159 0.60392159 0.61176473] 
[ 0.61960787 0.6156863 0.61176473 0.61176473 0.6156863 ]] 

あなたは、標準的なpyplot方法に加えて、skimageモジュールに探して検討するかもしれません。そこにはたくさんの画像操作メソッドがあり、それらはすべてnumpyでうまくいくように作られています。希望が役立ちます。

関連する問題