2017-12-27 24 views
0

私はすべてのピクセル値の正規化した後、 misc.imreadとmisc.imsave変化画素は値

  • 画像を保存を行うグレースケール画像を読み取る

    画像を開くと、別のピクセル値が表示されます。

    マイコードスニペット:私はimg_scaleimg_reopenを比較すると

    image = misc.imread('lena.jpg') 
    maximum = np.max(image) # finds maximum pixel value of image 
    img = np.divide(image, maximum) # divide every pixel value by maximum 
    # scale every pixel value between 0 and 127 
    img_scale = np.round(img * (np.power(2,7)-1)).astype(int) 
    misc.imsave('lena_scaled.jpg', img_scale) 
    img_reopen = misc.imread('lena_scaled.jpg') 
    

    私は別の値を取得する:

    By executing np.max(img_scale), I get 127. 
    By executing np.max(img_reopen), I get 255 
    By executing img_scale[0][0], I get [82,82,82] 
    By executing img_reopen[0][0], I get [156][156][156] 
    

    質問

    画素値を保存した後、変更を取得なぜイメージを開いて再オープンしますか?

  • 答えて

    1

    imsave関数は、ディスクに保存するときに画像を再スケーリングします。

    misc.imsave関数は、イメージ全体を(0,255)に再スケーリングするためフードでbytescaleを使用します。

    これは、再オープンするとnp.max 255となる理由です。ドキュメントhereを参照してください。

    フォローアップ: 再スケーリングせずに自分の価値観を維持するために、あなたはmisc.toimage機能を使用しようとすると、次のように結果を保存することができ、

    im = misc.toimage(img_scale, high=np.max(img_scale), low=np.max(img_scale) 
    im.save('lena_scaled.jpg') 
    

    あなたはmisc.imsave'lena_scaled.jpg'を読んだとき、あなたは使用してみてください次

    misc.imread('lena_scaled.jpg', mode='I') 
    

    I - Iに働くだろうと信じて 'L'(8ビットピクセル、黒と白) あなたのグレースケールイメージ用。

    これが役に立ちます。