2017-11-27 6 views
0

scipy.ndimage.imreadはscipyで廃止されました。そのためpyplotを使用するようにコードを直接切り替えましたが、結果は同じではありませんでした。私はkerasで構築された学習アルゴリズムの画像をインポートしています - それは1to1の変更だと思っていましたが、そうではありません。その違いが何であるかを説明できるpythonの教祖がそこにいますか?scipy.ndimage.imreadとmatplotlib.pyplot.imreadの違いは何ですか?

scipyのダウンロードを返す:

img_array:ndarray 異なるカラーバンド/チャネルがグレー画像はM×Nの、RGB画像MxNx3と RGBA画像であるように、三次元で格納されていますMxNx4。 scipy documentation

matplotlibのは返します

戻り値がnumpy.arrayです。グレースケールイメージの場合、戻り配列 はMxNです。 RGB画像の場合、戻り値はMxNx3です。 RGBA画像の場合、 の戻り値はMxNx4です。 matplotlib documentation

MWE:

from scipy import ndimage 
import_image = (ndimage.imread("img.png").astype(float) - 
              255.0/2)/255.0 
print import_image[0] 

import matplotlib.pyplot as plt 
import_image = (plt.imread("img.png").astype(float) - 
              255.0/2)/255.0 

print import_image[0] 
+2

私は1つの主な違いは画像に関係すると思います。 'plt.imread'はPNGを読むための独自の関数を持ち、' ​​scipy.ndimage.imread'はPILを使います。他のすべてのファイル形式では、両方の関数がPILを使用する必要があります。違いはありません。あなたの実際の問題に関しては、もちろん、人々が行動を再現できるように、テストケースを私たちに提供することができます。 – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest MWEでアップデートを参照してください - グレースケール画像を使用しています。 – ashley

+0

あなたが遭遇したエラー/問題はどこですか?私はあなたの例から何を取るべきですか?代わりに推奨されるlibを使用することもできます。しかし、それはおそらくデコードや配列型の決定についてはあまりないだろう。 – sascha

答えて

1

ここでは真MCVEあろう:

  • scipy.ndimage.imreadを見ることができるように

    import matplotlib.pyplot as plt 
    import numpy as np 
    import scipy.ndimage 
    
    im = np.random.rand(20,20) 
    plt.imsave("img.png",im) 
    
    ### Scipy 
    i2 = scipy.ndimage.imread("img.png") 
    print i2.shape, i2.min(), i2.max(), i2.dtype 
    # (20L, 20L, 4L) 1 255 uint8 
    
    ### Matplotlib 
    i3 = plt.imread("img.png").astype(float) 
    print i3.shape, i3.min(), i3.max(), i3.dtype 
    # (20L, 20L, 4L) 0.00392156885937 1.0 float64 
    

    範囲intタイプのnumpyの配列を作成しfr om 0..255

  • pyplot.imreadは、0. .. 1.の範囲のfloat型のnumpy配列を作成します。
関連する問題