2016-04-25 33 views
4

イメージをscipyでサイズ変更しようとしましたが、画像を保存しようとするまですべて正常に動作しているようです。私がイメージを保存しようとすると、あなたはタイトルで見ることができるエラーが発生します。以下の完全なトレースバックが利用できます。エラーの値のエラー:大きすぎます3> 2

import numpy as np 
import scipy.misc 
from PIL import Image 

image_path = "img0.jpg" 


def load_image(img_path): 
    img = Image.open(img_path) 
    img.load() 
    data = np.asarray(img, dtype="int32") 
    return data 


def save_image(npdata, outfilename): 
    img = Image.fromarray(np.asarray(np.clip(npdata, 0, 255), dtype="uint8"), "L") 
    img.save(outfilename) 

array_image = load_image(image_path) 

array_resized_image = scipy.misc.imresize(array_image, (320, 240), interp='nearest', mode=None) 

save_image(array_resized_image, "i1.jpg") 

完全トレースバック:

Traceback (most recent call last): 
    File "D:/Python/Playground/resize image with scipy.py", line 26, in <module> 
    save_image(array_resized_image, "i1.jpg") 
    File "D:/Python/Playground/resize image with scipy.py", line 16, in save_image 
    img = Image.fromarray(np.asarray(np.clip(npdata, 0, 255), dtype="uint8"), "L") 
    File "C:\Anaconda2\lib\site-packages\PIL\Image.py", line 2154, in fromarray 
    raise ValueError("Too many dimensions: %d > %d." % (ndim, ndmax)) 
ValueError: Too many dimensions: 3 > 2. 
+1

( 'プリント(array_resized_image.shape)を行う' –

+1

はできません – miradulo

+1

'int32'で画像を開き、' uint8'に変換せずに保存するとどうなるでしょうか? –

答えて

2

array_resized_imageよう(320, 240, 3)の形状を有しています。あなたは簡単にハンドリングファイルの読み込みと保存のためのscipy.misc.imreadscipy.misc.imsaveを使用することができますので、あなたの例は、これに沸く:?

array_resized_image.shapeの値が何
import scipy.misc 

image_path = "img0.jpg" 

array_image = scipy.misc.imread(image_path) 
array_resized_image = scipy.misc.imresize(array_image, (320, 240), interp='nearest', mode=None) 
scipy.misc.imsave("i1.jpg", array_resized_image) 
+0

それは、助けてくれてありがとう、動作します。 – Gunnm

2

あなたはfromarray(... 'L')を行う前に、2次元配列に変換する必要がありませんか?

これは、scipy関数を使用して行うことができます。または実際には、より素早く、RGBを係数で掛けることができます。赤、緑、青の成分は、このように格納されているため、三次元 - この

npdata = (npdata[:,:,:3] * [0.2989, 0.5870, 0.1140]).sum(axis=2) 
+0

これは灰色のイメージを色付きのイメージから作り出します。私が元の例を読んだので、それは著者が望んでいたものではありませんか? –

+1

明らかにそうではありません...しかし、エラーの原因はs.shape(H、W)ではなくa.shape(H、W、3)でPIL.Image.fromarray(a、 'L'だから私は誰かが "ValueError:3> 2"という次元数が多すぎると、私の説明を見つけて喜んでくれるかもしれないと思う! – paddyg

関連する問題